开发者

Read text file in Java

开发者 https://www.devze.com 2022-12-28 09:46 出处:网络
I have a text file. I would like to retrieve the content from one line to another line. For example, the file may be 200K lines. I want to read the content f开发者_高级运维rom line 78 to line 2735. S

I have a text file. I would like to retrieve the content from one line to another line. For example, the file may be 200K lines. I want to read the content f开发者_高级运维rom line 78 to line 2735. Since the file may be very large, I do not want to read the whole content into the memory.


Use BufferedReader.readLine() and count the lines. You'll keep only the buffer size and the current line in memory.

And no, it's not possible to get to line 3412 without reading the whole file up to that point (unless your lines all have a fixed size).


Here's a start of a possible solution:

public static List<String> linesFromTo(int from, int to, String fileName)
        throws FileNotFoundException, IllegalArgumentException {
    return linesFromTo(from, to, fileName, "UTF-8");
}

public static List<String> linesFromTo(int from, int to, String fileName, String charsetName)
        throws FileNotFoundException, IllegalArgumentException {

    if(from > to) {
        throw new IllegalArgumentException("'from' > 'to'");
    }
    if(from < 1 || to < 1) {
        throw new IllegalArgumentException("'from' or 'to' is negative");
    }

    List<String> lines = new ArrayList<String>();
    Scanner scan = new Scanner(new File(fileName), charsetName);
    int lineNumber = 0;

    while(scan.hasNextLine() && lineNumber < to) {
        lineNumber++;
        String line = scan.nextLine();
        if(lineNumber < from) continue;
        lines.add(line);
    }

    if(lineNumber != to) {
        throw new IllegalArgumentException(fileName+" does not have "+to+" lines");
    }

    return lines;
}


Just simply read line by line first and count the line numbers and start getting the contents you need at the line position you mentioned.


I would suggest using a RandomAccessFile, this class enables you to jump to a specific location in a file. So if you want to read the last line of the file you don't have to read all of the previous lines you can just jump to that line.

0

精彩评论

暂无评论...
验证码 换一张
取 消