Я читаю файл, затем пишу файл, и пробелы между текстом исчезают - PullRequest
0 голосов
/ 14 мая 2019

Я читаю из временного файла и записываю его в постоянный файл, но где-то строка теряет все свои пробелы

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        String b, filename;
        b = null;
        filename = (textfieldb.getText());
        try {
            // TODO add your handling code here:
            dispose();
            Scanner scan;
            scan = new Scanner(new File("TempSave.txt"));
            StringBuilder sb = new StringBuilder();
            while (scan.hasNext()) {
                sb.append(scan.next());
            }
            b = sb.toString();
                    String c; 
        c = b;
        FileWriter fw = null;
        try {
            fw = new FileWriter(filename + ".txt");
        } catch (IOException ex) {
            Logger.getLogger(hiudsjh.class.getName()).log(Level.SEVERE, null, ex);
        }
        PrintWriter pw = new PrintWriter(fw);
        pw.print(c);
        pw.close();
        System.out.println(c);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
          dispose();
        hiudsjh x = new hiudsjh();
        x.setVisible(true);

        System.out.println(b);
    } 

нет сообщений об ошибках, просто вывод должен быть файл с пробелами

Ответы [ 4 ]

0 голосов
/ 14 мая 2019

Вместо hasNext() и next(), с которыми вы не получаете пробелы, используйте hasNextLine() и nextLine(), чтобы читать строку filr построчно и добавлять после каждой строки разделитель строк:

while (scan.hasNextLine()) {
    sb.append(scan.nextLine());
    sb.append(System.lineSeparator());
} 
0 голосов
/ 14 мая 2019

со сканера документация :

Сканер разбивает свои входные данные на токены, используя шаблон разделителя, который по умолчанию соответствует пробелу.

И из следующих методов документа

Находит и возвращает следующий полный токен с этого сканера. Полному токену предшествует ввод, соответствующий шаблону-разделителю.

Другими словами, сканер разбивает входную строку на последовательности без пробелов. Чтобы прочитать файл как строку, вы можете использовать new String(Files.readAllBytes(Paths.get(filePath)), StandardCharsets.UTF_8); для чтения всего файла.

0 голосов
/ 14 мая 2019

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

while (scan.hasNextLine()) {
    sb.append(scan.nextLine());
    sb.append(System.lineSeparator());
}
0 голосов
/ 14 мая 2019

Это:

while (scan.hasNext()) {
    sb.append(scan.next());
}

- это то, что удаляет пробелы ... next() вернет следующий полный токен со сканера, это не включает пробелы.Вам нужно будет добавить пробелы или изменить способ чтения файла ...

...