什么可能导致程序无法读取整个文件?

时间:2012-03-05 11:21:24

标签: java file fileinputstream

我有一个应该从文件中读取的程序。它读取了一些数据但不是全部。当我尝试在同一位置读取同一个文件时,另一个程序以相同的方式完成,它读取相同的类整个文件。 以下是两个程序中使用的代码:

                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格式,是一个非常大的文件,但我不知道这是不是问题。 提前谢谢!

2 个答案:

答案 0 :(得分:3)

嗯...你的解决方案有点过于复杂,因此可能会有很多因素导致问题。

我尝试在调试模式下启动应用程序,当它"挂起" 时,只需暂停线程,例如在Eclipse中,您将看到它在哪里等待数据。

如果您使用的是Java 7,则有一个简单的命令可以帮助您一次读取文件的所有行:

Path file = Paths.get(filename);
List<String> lines = Files.readAllLines(file, Charset.defaultCharset());

答案 1 :(得分:0)

当FileWriter仍处于打开状态时,您正在读取该文件。这可能导致没有将所有写入刷新到磁盘。

尝试在新的FileInputStream之前将调用移到close。