Подтвердить что ты не робот

Использование BufferedReader для чтения текстового файла

У меня возникли проблемы с использованием BufferedReader

Я хочу напечатать 6 строк текстового файла:

public class Reader {

public static void main(String[]args) throws IOException{

    FileReader in = new FileReader("C:/test.txt");
    BufferedReader br = new BufferedReader(in);

    while (br.readLine() != null) {
        System.out.println(br.readLine());
    }
    in.close();

}

Теперь из того, что я могу собрать каждый раз, когда я вызываю метод readLine(), он автоматически переходит к следующей строке.

Поэтому я не могу использовать условие br.readLine()!= null, так как он уже продвигает его на одну строку, и я получаю вывод:

Line 2
Line 4
Line 6

Какое условие я использую для проверки наличия новой строки в текстовом поле.

Спасибо заранее!

4b9b3361

Ответ 1

В этом проблема:

while (br.readLine() != null) {
    System.out.println(br.readLine());
}

У вас есть два вызова readLine - первый проверяет только там, где есть строка (но читает ее и отбрасывает), а вторая читает следующую строку. Вы хотите:

String line;
while ((line = br.readLine()) != null) {
    System.out.println(line);
}

Теперь мы вызываем только readLine() один раз за итерацию цикла и используем строку, которую мы читаем как для "закончили ли мы?". и "распечатать линии".

Ответ 2

Вы читаете цикл line через while, и через цикл вы читаете следующую строку, поэтому просто читайте его во время цикла

 String s;
 while ((s=br.readLine()) != null) {
     System.out.println(s);
  }

Ответ 3

Вы можете присвоить результат br.readLine() переменной и использовать ее как для обработки, так и для проверки:

String line = br.readLine();
while (line != null) { // You might also want to check for empty?
    System.out.println(line);
    line = br.readLine();
}

Ответ 4

Возможно, вы имеете в виду это:

public class Reader {

public static void main(String[]args) throws IOException{

    FileReader in = new FileReader("C:/test.txt");
    BufferedReader br = new BufferedReader(in);
    String line = br.readLine();
    while (line!=null) {
        System.out.println(line);
        line = br.readLine();
    }
    in.close();

}

Ответ 5

Try:

String text= br.readLine();
while (text != null) 
{
  System.out.println(text);
  text=br.readLine();
}
in.close();

Ответ 6

или

public String getFileStream(final String inputFile) {
        String result = "";
        Scanner s = null;

        try {
            s = new Scanner(new BufferedReader(new FileReader(inputFile)));
            while (s.hasNext()) {
                result = result + s.nextLine();
            }
        } catch (final IOException ex) {
            ex.printStackTrace();
        } finally {
            if (s != null) {
                s.close();
            }
        }
        return result;
}

Это также первая строка.

Ответ 7

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

public class user {
 public static void main(String x[]) throws IOException{
  BufferedReader b=new BufferedReader(new FileReader("<path to file>"));
  String[] user=new String[30];
  String line="";
  while ((line = b.readLine()) != null) {
   user[i]=line; 
   System.out.println(user[1]);
   i++;  
   }

 }
}

Ответ 8

private void readFile() throws Exception {
      AsynchronousFileChannel input=AsynchronousFileChannel.open(Paths.get("E:/dicom_server_storage/abc.txt"),StandardOpenOption.READ);
      ByteBuffer buffer=ByteBuffer.allocate(1024);
      input.read(buffer,0,null,new CompletionHandler<Integer,Void>(){
        @Override public void completed(    Integer result,    Void attachment){
          System.out.println("Done reading the file.");
        }
        @Override public void failed(    Throwable exc,    Void attachment){
          System.err.println("An error occured:" + exc.getMessage());
        }
      }
    );
      System.out.println("This thread keeps on running");
      Thread.sleep(100);
    }