我读文件然后写文件,文本之间的空格消失了

时间:2019-05-14 18:44:06

标签: java file-io java.util.scanner stringbuilder

我正在从临时文件中读取并将其写入永久文件,但是该字符串丢失了所有空格

    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 :(得分:0)

此:

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

是删除空格的原因……next()将从扫描器返回下一个完整的令牌,其中不包括空格。您将需要添加空格或更改读取文件的方式...

答案 1 :(得分:0)

从扫描仪documentation

  

“扫描程​​序”使用分隔符模式将其输入分为令牌,默认情况下,该模式与空格匹配。

next methods docu

  

查找并返回此扫描仪的下一个完整令牌。完整的令牌位于其前面,然后是与定界符模式匹配的输入。

换句话说,扫描程序将输入的String分成没有空格的序列。要将文件读取为字符串,可以使用new String(Files.readAllBytes(Paths.get(filePath)), StandardCharsets.UTF_8);读取整个文件。

答案 2 :(得分:0)

您无需逐行扫描每个令牌,而是可以逐行读取文件,并在每行之后添加一个行分隔符:

while (scan.hasNextLine()) {
    sb.append(scan.nextLine());
    sb.append(System.lineSeparator());
}

答案 3 :(得分:0)

代替hasNext()next()来获取空格,而使用hasNextLine()nextLine()逐行读取filr,并在每行之后追加行分隔符:

while (scan.hasNextLine()) {
    sb.append(scan.nextLine());
    sb.append(System.lineSeparator());
}