我有一个应该从文件中读取的程序。它读取了一些数据但不是全部。当我尝试在同一位置读取同一个文件时,另一个程序以相同的方式完成,它读取相同的类整个文件。 以下是两个程序中使用的代码:
if (i >= 1) {
try {
file = new File("Tabel " + i + " " + timeLine + ".csv");
fw = new FileWriter(file);
fw.write(FileChooserSave.getInstance().getStringArray()[i]);
if (i == 1) {
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
fis.close();
isr.close();
br.close();
}
} catch (IOException ex) {
Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
fw.close();
} catch (IOException ex) {
Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
它始终在同一个地方停止阅读。我检查是否有一些尴尬的角色,但没有。 我还应该提一下,我读的文件是.csv格式,是一个非常大的文件,但我不知道这是不是问题。 提前谢谢!
答案 0 :(得分:3)
嗯...你的解决方案有点过于复杂,因此可能会有很多因素导致问题。
我尝试在调试模式下启动应用程序,当它"挂起" 时,只需暂停线程,例如在Eclipse中,您将看到它在哪里等待数据。
如果您使用的是Java 7,则有一个简单的命令可以帮助您一次读取文件的所有行:
Path file = Paths.get(filename);
List<String> lines = Files.readAllLines(file, Charset.defaultCharset());
答案 1 :(得分:0)
当FileWriter仍处于打开状态时,您正在读取该文件。这可能导致没有将所有写入刷新到磁盘。
尝试在新的FileInputStream之前将调用移到close。