2014-10-19 130 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