Как прочитать файл из указанной строки c в другую строку c? - PullRequest
1 голос
/ 08 февраля 2020

Итак, я пытаюсь заставить программу чтения файлов читать строки от x до y, но когда я запускаю программу, она читает все строки файла, а не строки, которые должны были начинаться и заканчиваться, например, если я ищу идентификатор в файле, он должен напечатать de ID, имя владельца (следующая строка строки идентификатора) и его / ее адрес (следующая строка названия строки), но вместо того, чтобы печатать только это печатает все идентификаторы, имена и адреса всех в файле.

System.out.println("Escriba el ID Del Cliente");
         CL.setID(reader.next());
         String line2;
         int count = 0;
         try {
             BufferedReader input = new BufferedReader(new FileReader(file));
             Scanner input2 = new Scanner(file);
             PrintWriter output = new PrintWriter(new FileOutputStream(file, true));
             LineNumberReader readers = new LineNumberReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));

             while((line2 = input.readLine()) != null)
             {

                 if(line2.contains(CL.getID()))
                 {
                     while(((line2 = readers.readLine()) != null) && readers.getLineNumber() <= count + 3)
                     {
                         count++;
                         System.out.println(line2);


                     }

                     input.close();
                     input2.close();
                     output.close();
                     readers.close();
                     break;
                }





             }

         }catch(IOException ex)
         {
             System.out.println("ERRORR!!!!!!");
         }

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

Я изменил ваш код, потому что проблема была в count++, что в конечном итоге привело к чтению всех строк из ваших файлов, и в line2 = readers.readLine(), который снова будет считывать из первой строки файла ( программа работает half правильно, потому что она читает только 3 строки и только если line2 содержит ваш идентификатор). Теперь, чтобы ваша программа работала правильно, вам нужно либо использовать BufferedReader, либо LineNumberReader.

public static void main(String[] args) {
    System.out.println("Escriba el ID Del Cliente");
    String line2;
    File file = new File(yourpathhere);
    int lineCount = 0;
    try {
        PrintWriter output = new PrintWriter(new FileOutputStream(file, true));
        LineNumberReader readers = new LineNumberReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
        while ((line2 = readers.readLine()) != null) {
            lineCount++;
            if (line2.contains(CL.getId())) {
                while (line2 != null && readers.getLineNumber() <= lineCount + 3) {
                    System.out.println(line2);
                    line2 = readers.readLine();
                }
                output.close();
                readers.close();
                break;
            }
        }

    } catch (IOException ex) {
        System.out.println("ERRORR!!!!!!");
    }
    }

PS : обратите внимание на метод getLineNumber(), поскольку он увеличивает прочитанные строки до момента, когда вы его вызываете. Это означает, что если у нас не было lineCount, а идентификатор, который мы пытаемся найти, находился на 6-й строке, значение getLineNumber() в момент, когда line2.contains(CL.getId()) == true было 6, поэтому readers.getLineNumber() <= 3 будет FALSE и программа больше не будет работать правильно. (Мы должны отслеживать прочитанные строки до того момента, пока мы не проверим идентификатор)

0 голосов
/ 08 февраля 2020

Предполагая, что у вас есть файл с 100 строками, и вы хотите проверить и распечатать строки с 5 по 10, вы можете попробовать это:

System.out.println("Escriba el ID Del Cliente");
CL.setID(reader.next());
String line;
int count = 0;
int xLine = 5;
int yLine = 10;
try (BufferedReader input = new BufferedReader(new FileReader(file)))
{
    while((line = input.readLine()) != null)
    {
        if(count < xLine)
        {
            // skip all lines lower then start
            continue;
        }
        else if(count >= xLine && count <= yLine && line.contains(CL.getID()))
        {
            // print line if line is between lines to read
            // and if line contains ID
            System.out.println(line);
        }
        else
        {
            // break if count is bigger then yLine
            break;
        }
        count++;
    }
}
catch(IOException ex)
{
    System.out.println("ERRORR!!!!!!");
}

Вы читаете все строки, пока BufferedReader не достигнет null. Вы проверяете, содержит ли строка ваш идентификатор. Затем вы проверяете, находится ли количество между номерами белья, которые вы хотите проверить / распечатать. Затем вы увеличиваете количество обработанных строк.

Я упростил блок try-catch-с помощью оператора try-with-ressources . Пока что я не вижу ваших планов с output и scanner, поэтому я удалил их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...