2014-10-19 94 views
2

下面是我如何計算文本文件中的行數。只是想知道有沒有其他方法來做到這一點?計算文本文件中的行數(java)

while(inputFile.hasNext()) {  
    a++; 
    inputFile.nextLine(); 
} 
inputFile.close(); 

我想輸入數據到數組中,我不想兩次讀取文本文件。

任何幫助/建議表示讚賞。

感謝

+0

參考http://stackoverflow.com/questions/1277880/how-can-i-get-the-count-of-line-in-a-file-in-an-efficient-way – DeepInJava 2014-10-19 07:33:34

+0

你想要計數行或存儲在數組中?如果後者你不需要數線...... – assylias 2014-10-19 07:34:42

+0

是的。我必須閱讀文本,然後根據文本的長度製作一個數組。然後再次讀取數據並將其放入數組中。它只需要10-15行代碼就可以對文本文件進行計數。 – Nghia 2014-10-19 07:35:01

回答

1

如果你只是想將數據添加到一個數組中,然後我將新值添加到數組中。如果您正在閱讀的數據量不大,並且您不需要經常這樣做,那應該沒問題。我用這樣的事情,在這個答案給出:Reading a plain text file in Java

BufferedReader fileReader = new BufferedReader(new FileReader("path/to/file.txt")); 
try { 
    StringBuilder sb = new StringBuilder(); 
    String line = br.readLine(); 

    while (line != null) { 
     sb.append(line); 
     sb.append(System.lineSeparator()); 
     line = br.readLine(); 
    } 
    String everything = sb.toString(); 
} finally { 
    br.close(); 
} 

如果您在數字閱讀中,字符串可以轉換爲數字,說爲整數的intValue =的Integer.parseInt(文本)

8

如果您使用的是Java 7或更高版本,你可以直接讀取使用readAllLines方法的所有行的列表。這將是很容易

readAllLines

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

則列表的大小,將返回的行數的文件

int noOfLines = lines.size(); 
+1

對於休閒讀者,請注意'readAllLines'不適合閱讀大文件。 – Stephan 2015-05-20 06:35:07

4

如果你使用的是Java 8,你可以使用流:

long count = Files.lines(Paths.get(filename)).count(); 

這將有很好的表現,真的很有表現力。

不利的一面(與Thusitha Thilina Dayaratn答案相比)是你只有行數。 如果你也想在列表中有行,你可以做(​​仍然使用Java 8流):

// First, read the lines 
List<String> lines = Files.lines(Paths.get(filename)).collect(Collectors.toList()); 
// Then get the line count 
long count = lines.size(); 
+1

或者快捷方式Files.lines(Paths.get(filename))。count()' – 2016-02-08 23:22:38

+0

Thanks @MattByrne,我根據你的建議編輯了答案 – superbob 2016-02-09 08:07:32

+0

這對於大文件是很好的方法(例如服務器日誌?) – 2017-06-19 17:32:48

-1

我沒有足夠的信譽發表評論,但@superbob答案几乎是完美的,你的確應該確保通過Charset.defaultCharset()作爲第二參數,如:

Files.lines(file.toPath(), Charset.defaultCharset()).count() 

這是因爲使用Files.lines UTF-8通過默認,然後使用,因爲它是非默認UTF-8的系統上可以產生的java.nio。 charset.MalformedInputException。

+0

*「我沒有足夠的評論聲望」* **並不意味着您應該使用答案**。這意味着你需要學習如何使用該網站,並且當你有足夠的經驗時,你將被授予評論的[特權](/幫助/特權)。在此之前,請[提供不需要提問者澄清的答案](// meta.stackexchange.com/q/214173)。 – 2016-11-17 16:04:46

+0

Woah,這真是太好了......我只是想給閱讀該頁面的人提供額外的信息,而這是我現在唯一可以想到的方式。如果這是一個糟糕的主意/行爲,我很抱歉,我只是想幫助... – 2016-11-18 15:07:41