2015-07-22 34 views
2

我有一個簡單的輸出文本文件,它被稱爲logOutput.txt在Java中有更高效的方式來讀取文件中的數字嗎?

而且我想我的Java程序給最近的一個在文件(4)中。這裏是我的代碼:

import java.util.*; 
import java.io.*; 

public class readLogFile { 

    public static void main(String[] a) { 
     int logNumber = 0; 

     try { 

      File file = new File("logOutput.txt"); 
      Scanner input = new Scanner(file); 
      while (input.hasNext()) { 
       logNumber = input.nextInt(); 

      } 

      System.out.println("the log # is: " + logNumber); 

     } catch (FileNotFoundException fne) { 

     } 
    } 

}// end class 

我的關注主要是關於while循環。有沒有更高效的方法?在這裏,我將每行讀入變量,然後重寫。我在想 - 也許去檢查什麼時候nextInt爲空?

感謝

+0

或...效率可能不是這樣的小應用程序的關注! ? !?!? – Coffee

+3

這不是應用程序的大小。這是文件的大小。給你的小應用足夠的時間,他們可以填滿硬盤。 – CandiedOrange

+0

@CandiedOrange - 啊好吧,是的,我可以看到這一點。如果我們有大量的日誌文件,那麼我們需要儘可能高效的東西 – Coffee

回答

2

您可以檢查使用Integer.parse()

輸入在while循環:

String s = input.nextLine(); 
try{ 
    int i = Integer.parseInt(s); 
    logNumber = i; 
} catch(NumberFormatException ex) { 
    System.out.println("It is not an int"); 
} 

如果該行不爲整數或空,會拋出異常。

1

所以,至少有兩種方法來讀取這裏相關的文件。

  1. 將整個文件讀入字符串(或字節[]),然後一次解析整個事物。這對於更大的文件來說是非常可怕的,而且可能不會更快。
  2. 將文件的一部分讀入緩衝區,解析它,然後重複,直到沒有更多的文件。

第二種方法對記憶效率更高,因爲您只是將任何時間處理的內容都記憶在內存中。用他們的方式,你在這裏做,你有一個真正的,真正的長線(如果他們從來沒有打'輸入'?)會發生什麼情況的唯一失敗案例,但除此之外,這是安全的...並且將工作分成機器可以裝入RAM的東西。

是的,你會覆蓋這個值很多次,但你只會做一次每行的輸入,所以它不能成倍地變壞,寫入內容很便宜。這可能與它將要獲得的效率一樣高;調整它的唯一原因是如果你正在處理非常非常大的輸入集。

相關問題