Я пытаюсь распечатать каждую отдельную строку внешнего файла, но мне удается распечатать только каждое отдельное слово . Вот как сейчас выглядит мой код:

  Scanner scnr = new Scanner(System.in);
  System.out.println("Enter input filename: ");
  String inputFile = scnr.next();
  
  FileInputStream fileByteStream = null;
  Scanner inFS = null; 
  
  fileByteStream = new FileInputStream(inputFile);
  inFS = new Scanner(fileByteStream);
  
  while (inFS.hasNext()) {
     String resultToPrint = inFS.next();
     System.out.println(resultToPrint);
  }

Так, например, если внешний файл .txt выглядит примерно так: ЭТО ПЕРВАЯ СТРОКА. (новая строка) ЭТО ВТОРАЯ СТРОКА. (новая строка) ЭТО ТРЕТЬЯ СТРОКА. ...

Тогда прямо сейчас он печатается так: ЭТА (новая строка) ЕСТЬ (новая строка) (новая строка) ПЕРВАЯ (новая строка) СТРОКА (новая строка) ЭТА (новая строка) ЕСТЬ ...

И я хочу, чтобы он печатался так, как в исходном файле.

Есть ли предложения о том, как сделать каждую итерацию resultToPrint полной строкой текста, а не одним словом? (Я новичок в java, извините, если ответ кажется очевидным!)

-2
Bella 11 Окт 2021 в 17:56

3 ответа

Лучший ответ

Заменить строку

inFS = new Scanner(fileByteStream);

От

inFS = new Scanner(fileByteStream).useDelimiter( "\\n" );

Это установит разделитель «слово» на символ перевода строки, что сделает всю строку одним «словом».

Или используйте java.nio.files.Files.lines()

Также хорошей альтернативой будет java.io.BufferedReader.lines()

0
tquadrat 11 Окт 2021 в 15:14

Для чтения файла вам понадобится BufferedReader :

Читает текст из потока ввода символов, буферизует символы, чтобы обеспечить эффективное чтение символов, массивов и строк.

Затем используйте его метод readLine :

Читает строку текста. Строка считается завершенной одним из следующих символов: перевод строки ('\ n'), возврат каретки ('\ r') или возврат каретки, за которым сразу следует перевод строки.

Этот код читает каждую строку файла, а затем печатает ее:

try (BufferedReader br = new BufferedReader(new FileReader(new File(filePath)))) {
  while ((line = br.readLine()) != null) {
    System.out.println(line);
  }
}
0
Yassir Khaldi 11 Окт 2021 в 15:08

Более простой и чистый подход:

FileInputStream fis = new FileInputStream("filename");
Scanner sc = new Scanner(fis);
while (sc.hasNextLine()) {
    System.out.println(sc.nextLine());
}

Или

BufferedReader br = new BufferedReader(new FileReader("filename"));
br.lines().forEach(System.out::println);
0
Giorgi Tsiklauri 11 Окт 2021 в 15:24