在IT公司的實習中,我被分配了一個任務來編寫一個腳本或一個Java程序,以將CSV文件轉換爲LDIF文件格式,我相信很多組織用來填充/修改/刪除許多用戶的目錄。我試圖編寫一個java程序,可以幫助我將CSV文件轉換爲LDIF文件。然後將此LDIF文件導入到電子目錄中以添加新用戶。目前,我有一個簡單的程序,但需要重大改進,但我無法提供。使用java將CSV文件轉換爲LDIF文件
截圖樣品CSV文件的(第一行是報頭):
csv file sample
樣品CSV文件在記事本++:
csv file in Notepad++
(第一行是頭在一排中的每個元素是用逗號(,)分隔)
使用下面給出的示例代碼(OUTPUT)產生
樣品LDIF文件:
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文件中的每一行都被轉換爲一組數據(lines = dn:to 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文件時,我將不得不更改上面突出顯示區域的代碼。它佔用了大量的時間,因爲我遇到了超過五十列的文件,並且在手動更改代碼時增加了出錯的機率。最重要的是一些列有空值(需要從輸出中排除)。
•如何排除輸出中的空值?
•即使CSV文件的列數不同,是否可以自動生成輸出?我嘗試了ArrayList,但我無法想出解決問題的方法。
感謝編輯@morels ...想做的事,不知道如何...... – Dorjee
選擇要呈現爲代碼的文本後,編輯器中的「{}」按鈕。 – morels