我在Java中编写了一个用于更新由制表符分隔的文本文件的方法。我正在使用opencsv库。首先,我正在读取现有文件,然后更改某些列的值,然后覆盖该文件。我正在运行Windows 7.问题是现在并非所有内容都写入文件。即使我没有更改任何值而只是覆盖文件,也不会写入所有记录。
我的代码如下。这有什么问题?
private void csvWrite(int[] boundary, String filename, int answerCount) {
CSVReader csvReader = null;
List<String[]> csvBody = null;
try {
csvReader = new CSVReader(new FileReader(PATH + FILE),'\t');
csvBody = csvReader.readAll();
} catch (IOException e) {
e.printStackTrace();
}
// Search for the file
int count = 0;
for (String[] str : csvBody) {
if (str[0].equals(filename)) {
// found
csvBody.get(count)[POS_START_INDEX+answerCount-2] = Arrays.toString(boundary);
break;
}
count++;
}
try {
csvReader.close();
CSVWriter writer = new CSVWriter(new FileWriter(PATH + FILE),'\t');
writer.writeAll(csvBody);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
我遇到了同样的问题。对我来说,这是因为我没有适当地关闭所有读者和作家。 实施autocloseable后得到解决:
private File writeToTempFile(File file) throws IOException {
File tempFile = new File("/var/tmp/newcsv.csv");
tempFile.createNewFile();
try(FileReader fileReader = new FileReader(file);
CSVReader csvReader = new CSVReaderBuilder(fileReader).withSkipLines(4).build();
FileWriter outputFileWriter = new FileWriter(tempFile);
CSVWriter writer = new CSVWriter(outputFileWriter, CSVWriter.DEFAULT_SEPARATOR,
CSVWriter.NO_QUOTE_CHARACTER,
CSVWriter.NO_ESCAPE_CHARACTER,
CSVWriter.DEFAULT_LINE_END);){
writer.writeAll(csvReader.readAll());
}catch (Exception e){
}
return tempFile;
}