简体   繁体   中英

counting the number of lines in a text file (java)

Below is how i count the number of lines in a text file. Just wondering is there any other methods of doing this?

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

I'm trying to input data into an array, i don't want to read the text file twice.

any help/suggestions is appreciated.

thanks

If you are using java 7 or higher version you can directly read all the lines to a List using readAllLines method. That would be easy

readAllLines

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

Then the size of the list will return you number of lines in the file

int noOfLines = lines.size();

If you are using Java 8 you can use streams :

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

This will have good performances and is really expressive.

The downside (compared to Thusitha Thilina Dayaratn answer) is that you only have the line count. If you also want to have the lines in a List, you can do (still using Java 8 streams) :

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

If you just want to add the data to an array, then I append the new values to an array. If the amount of data you are reading isn't large and you don't need to do it often that should be fine. I use something like this, as given in this answer: 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();
}

If you are reading in numbers, the strings can be converted to numbers, say for integers intValue = Integer.parseInt(text)

I do not have enough reputation to comment but @superbob answer is almost perfect, indeed you must ensure to pass Charset.defaultCharset() as 2nd parameter like :

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

That's because Files.lines used UTF-8 by default and then using as it is on non default UTF-8 system can produce java.nio.charset.MalformedInputException.

You can do it just like this, everyone has some complicated way of doing it when you can just simply do it like this:

$file = "file.txt";
$count = count(file($file));  
echo "there are $count lines";

Very easy to use.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM