我在 byte[]
中获取了一个用逗号分隔引号值的文件,我希望使用OpenCSV将其另存为CSV。我using this以CSV格式保存。
以下是将byte []转换为数组然后将其存储在文件
中的代码byte[] bytes = myByteStream.getFile();
String decoded = new String(bytes, "UTF-8");
//String lines[] = decoded.split("\\r?\\n");
FileOutputStream fos = new FileOutputStream("/home/myPC/Desktop/test.csv");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
CSVWriter writer = new CSVWriter(osw);
String[] row = {decoded};
writer.writeNext(row);
writer.close();
osw.close();
但是上面的代码会在一行中添加额外的引号并将所有行合并在一起。
有关如何正确执行此操作的任何帮助吗?
答案 0 :(得分:2)
您可以阻止在CSVWriter
的构造函数中为单元格值添加引号,例如:
CSVWriter writer = new CSVWriter(osw, CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER);
关于整个字节数组保持为单行。您确定原始文件中有换行符。
如果是这样,你可以通过以下方式逃脱:
BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "ASCII"));
String line;
while ((line = reader.readLine()) != null) {
// Handle the line, ideally in a separate method
}
答案 1 :(得分:1)
我认为Apache Commons CSV是一个更好的CSV库。从粘贴的代码中,不清楚是否要以某种方式更改文件的内容或只是复制它:在后一种情况下,您甚至不需要将文件解析为CSV记录 - 只需将其复制为byte-for -字节。在前一种情况下,即如果您需要修改文件的内容,则需要类似(此处使用的Commons CSV)
CSVParser parser = CSVFormat.newFormat(',').parse(
new InputStreamReader(new ByteArrayInputStream(bytes), "UTF8"));
CSVPrinter printer = CSVFormat.newFormat(',').print(out);
for (CSVRecord record : parser) {
try {
printer.printRecord(record);
} catch (Exception e) {
throw new RuntimeException("Error at line "
+ parser.getCurrentLineNumber(), e);
}
}
parser.close();
printer.close();
的Javadoc