【发布时间】:2014-03-13 15:17:42
【问题描述】:
我正在尝试创建一个 Java 应用程序来将 Excel/csv 文件内容转换为 JSON 格式, 因为我所有的输出 json 文件都有相同的标题。我选择使用带有 BufferedReader 和 BufferedWriter 的经典方法来简化。这是我的代码的一部分:
BufferedReader csvFile= new BufferedReader(new FileReader("DataTextCsv.csv"));
BufferedWriter jsonFile=new BufferedWriter(new FileWriter("converted.txt"));
String fileContent = csvFile.readLine();
// set the constant header
String jsonScript="constant header of json content";
while (fileContent !=null){
fileContent=csvFile.readLine();
String[] tab = fileContent.split(",");
// variable content from csv file
jsonScript+="\""+tab[0]+"\" :";
jsonScript+=tab[1]+","+"\n";
// End of json content construction
jsonScript=jsonScript.substring(0,jsonScript.length()-2);
jsonScript+="}";
String[] tabWrite=jsonScript.split("\n");
for (String item:tabWrite){
jsonFile.write(item);
jsonFile.newLine();
}
csvFile.close();
jsonFile.close();
}
应用程序可以正确读取 csv 文件的第一行,但无法继续到最后,并且我不断收到此错误(即使我尝试将所有 csv 数据设置在一行中:
Exception in thread "main" java.io.IOException: Stream closed
at java.io.BufferedReader.ensureOpen(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at CSVConverter.main(CSVConverter.java:17)
我意识到使用更具体的库会更简单,但由于我是 Java 新手,我无法找到合适的包来下载和安装
【问题讨论】:
-
如果您使用的是 Java 7,请删除文件 API 并使用
Files(以及 try-with-resource 语句) -
请注意用逗号分隔。如果某些项目在单元格内容中本身有逗号,则会产生不良结果。改用 supercsv。我的 2c
-
我的 Excel 文件中的小数点分隔符是“.”
-
这将在最后一行失败。它将在文档的最后一行输入 while 语句,但会将
fileContent设置为 null 并在文件末尾中断