IT 企業でのインターンシップで、CSV ファイルを LDIF ファイル形式に変換するためのスクリプトまたは Java プログラムを作成するタスクが割り当てられました。LDIF ファイル形式は、多くの組織が多くのユーザーのディレクトリに入力/変更/削除するために使用していると思います. CSV ファイルを LDIF ファイルに変換するのに役立つ Java プログラムを作成しようとしています。次に、この LDIF ファイルを e-directory にインポートして、新しいユーザーを追加します。現在、機能する単純なプログラムがありますが、提供できない大幅な拡張が必要です。
サンプル CSV ファイルのスクリーンショット (1 行目がヘッダー):
csv ファイルのサンプル
Notepad++ のサンプル CSV ファイル: Notepad++の
csv ファイル
(1 行目がヘッダーです。行の各要素はカンマ (,) で区切られます)
サンプル LDIF ファイル以下のサンプルコードを使用して生成されます (OUTPUT):
dn: cn=demotest1, ou=Data, o=Data
changetype: add
ou: Data
objectClass: dt1
objectClass: test_demo1
objectClass: demotest1
objectClass: Employee
cn: demotest1
uid: test_demo1
SAMAccountName: demt1
givenName: demotest1
sn: dt1
dn: cn=demotest2, ou=Data, o=Data
changetype: add
ou: Data
objectClass: dt2
objectClass: test_demo2
objectClass: demotest2
objectClass: Employee
cn: demotest2
uid: test_demo2
SAMAccountName: demt2
givenName: demotest2
sn: dt2
注: ヘッダーとしての最初の行は出力から除外されます。CSV ファイルの各行は一連のデータ (行 = dn: から sn:) に変換され、各データ セットは空白行で区切られます。
以下は、上記の LDIF ファイルを生成するために使用したコード サンプルです。
package readcsv;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
/**
*
* @author Dorjee
*/
public class ReadCSV {
public static void main(String[] args) {
ReadCSV obj = new ReadCSV();
obj.run();
}
public void run() {
String csvFile = "/Users/Dorjee/Desktop/sampleCSV.csv"; //Path of file to be read.
BufferedReader br = null;
String line = "";
String csvSplitBy = ",";
String[] column;
int count = 0;
try {
PrintStream out = new PrintStream(new FileOutputStream("OutputLDIFFile.ldif"));
br = new BufferedReader(new FileReader(csvFile));
while ((line = br.readLine()) != null) {
// using comma as separator
column = line.split(csvSplitBy);
//End format of the ouput file.
//Change according to .CSV file.
//Count used to exclude the reading of the first line.
if (count > 0) {
out.println("dn: cn="+column[5]+", ou="+column[7]+", o=Data"+
"\nchangetype: " + column[2]
+ "\nou: " + column[7]
+ "\nobjectClass: " + column[3]
+ "\nobjectClass: " + column[4]
+ "\nobjectClass: " + column[5]
+ "\nobjectClass: " + column[6]
+ "\ncn: " + column[5]
+ "\nuid: "+column[4]
+ "\nSAMAccountName: "+column[1]
+ "\ngivenName: "+column[0]
+ "\nsn: "+column[3]
+ "\n"
);
}
count++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println("Done");
}
}
これは、CSV ファイルから LDIF ファイルを生成するのに役立つ簡単なコードです。ここで生成されるデータのセットは数千行に及ぶ可能性があるため、これは役に立ちます。しかし、このコードは明らかに適切ではありません。ご覧のとおり、さまざまな列数を持つ別の CSV ファイルを LDIF ファイルに変換する必要があるたびに、上記の強調表示された領域のコードを変更する必要があります。50 列を超えるファイルに遭遇したため、かなりの時間がかかり、コードを手動で変更しているときにエラーが発生する可能性が高くなります。その上、一部の列には空の値があります (出力から除外する必要があります)。
• 空の値を出力から除外するにはどうすればよいですか?
• CSV ファイルの列数が異なる場合でも、出力の生成を自動化する方法はありますか? ArrayList を試しましたが、問題を解決する方法がわかりませんでした。