2012-03-05 98 views
0

我有一個應該從文件中讀取的程序。它讀取一定數量的數據,但不是全部。當我嘗試在相同位置讀取同一文件時,使用相同類以相同方式完成的另一個程序讀取整個文件。 這裏是在這兩個項目中使用的代碼:什麼可能導致程序無法讀取整個文件?

   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); 
       } 
      } 
     } 

它總是停止讀取在同一place.I檢查,看看是否有一些ackward字符,但沒有。 我還應該提到,我從中讀取的文件是.csv格式,並且是一個很大的文件,但我不知道這是否是問題所在。 在此先感謝!

+0

你的意思是「用相同的班級以相同的方式完成的另一個程序」?你的日誌中有錯誤嗎? – DNA 2012-03-05 13:06:05

+0

我的意思是另一個程序是一個完全相同的代碼,完全相同的位置讀取完全相同的文件的新項目。首先,我認爲責備屬於變量的名稱,但我檢查了多次.Not變量名稱導致問題。 – Carolik 2012-03-05 15:36:39

回答

0

您正在閱讀的文件,而FileWriter的仍然是開放的。這可能導致沒有將所有寫入刷新到磁盤。

嘗試在新的FileInputStream之前將呼叫移動到關閉位置。

+0

我意識到這一點。我調用flush後,所有的工作都很好。非常感謝你的回答!:) – Carolik 2012-03-06 23:01:07

3

嗯......你的解決方案有點過於複雜,所以可能會有很多事情導致這個問題。

我試着在調試模式下啓動應用程序,並且當它「掛起」時只是暫停了線程,例如,在Eclipse中,您將看到它在等待數據的位置。

如果您使用的是Java 7,有一個簡單的命令,它可以幫助你讀取文件的所有行一次:

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