我正在尝试创建一个程序,将所有数据从 excel 写入多个 csv 文件。
目前,我的程序创建了n个文件,并且只有最后一行 excel 被写入最后一个 csv 文件。
编程背景观察:
文件似乎正在写入。但是对于每个写入的行,它会以某种方式创建相同的文件 250 次。它会擦除最后写入的行。
我在使用OutputStream或BufferedWriter时可能会遇到一些问题。我只是无法弄清楚它是什么。
writeRow() 方法:
public static void writeRow(BufferedWriter bw, Cell[] row) throws IOException {
if (row.length > 0) {
bw.write(row[0].getContents());
for (int j = 1; j < row.length; j++) {
bw.write(',');
bw.write(row[j].getContents());
}
}
}
setFile() 方法:
public static BufferedWriter setFile (int i) throws IOException {
i=i/250;
File f = new File(dir + "file-" + (i+1) + ".csv");
// If i has changed, create a new file. Else, append to current file.
String encoding = "UTF8";
OutputStream os = null;
OutputStreamWriter osw = null;
BufferedWriter bw = null;
Boolean append = null;
try {
// If i has changed, create a new file, else append.
if (i%250==0) {
append = new Boolean("TRUE");
os = new FileOutputStream(f,append);
} else {
append = new Boolean("FALSE");
os = new FileOutputStream(f, append);
}
osw = new OutputStreamWriter(os, encoding);
bw = new BufferedWriter(osw);
} finally {
os.close();
osw.close();
}
return bw;
}
以下是例外情况。
Exception in thread "main" java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at java.io.BufferedWriter.flushBuffer(Unknown Source)
at java.io.BufferedWriter.flush(Unknown Source)
at Main.main(Main.java:46)
以下是代码的一些链接。
我究竟做错了什么?
这是svn主干:
https://franz-opensource.googlecode.com/svn/trunk/ExcelToCsv -