Читать текстовый файл на Java - PullRequest
3 голосов
/ 26 апреля 2010

У меня есть текстовый файл. Я хотел бы получить содержимое из одной строки в другую строку. Например, файл может содержать 200 тыс. Строк. Я хочу прочитать содержимое из строки 78 в строку 2735. Поскольку файл может быть очень большим, я не хочу читать весь контент в память.

Ответы [ 4 ]

12 голосов
/ 26 апреля 2010

Используйте BufferedReader.readLine () и считайте строки. Вы сохраните в памяти только размер буфера и текущую строку.

И нет, невозможно добраться до строки 3412, не прочитав весь файл до этого момента (если только все ваши строки не имеют фиксированного размера).

1 голос
/ 26 апреля 2010

Вот начало возможного решения:

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;
}
0 голосов
/ 26 апреля 2010

Я бы предложил использовать RandomAccessFile, этот класс позволяет вам перейти к определенному месту в файле. Поэтому, если вы хотите прочитать последнюю строку файла, вам не нужно читать все предыдущие строки, вы можете просто перейти к этой строке.

0 голосов
/ 26 апреля 2010

Просто сначала прочитайте строку за строкой, сосчитайте номера строк и начните получать нужное вам содержимое в указанной вами строке.

...