如何在Java中读写文件时保持相同的格式?

How to maintain the same format while reading and writing files in Java?

我正在尝试读取一个 xml 文件 (in.arxml) 并将其复制到另一个 xml 文件 (out.arxml)。当我刚刚读取 in.arxml 文件并在工作区中显示内容时,间距和格式保持不变,并且与文件中的完全一样。但是,当我将其写入 out.arxml 文件时,整个文件打印在一行中。有人可以告诉我我做错了什么吗?我读取和写入文件的代码如下所示:

 BufferedWriter out;
 BufferedReader in;
 String x =null;
 int lineNumb=0;

 try {

            in = new BufferedReader (new FileReader("C:\New_folder\in.arxml"));
            out = new BufferedWriter(new FileWriter(""C:\New_folder\out.arxml"));
            while (in.readLine()!= null){

                x = in.readLine();
                java.lang.System.out.println(x);
                out.write(x);

                lineNumb++;
            }
            in.close();
       }catch (IOException e){
            java.lang.System.out.println("There was a problem" + e);
        }

in.arxml 文件如下所示:

  <?xml version="1.0" encoding="UTF-8"?>
  <xxx xmlns="http://xd3.h?.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=""http://www.w3.org/2001/XMLSchema-instance">

而写的out.arxml是这样的

  <?xml version="1.0" encoding="UTF-8"?> <xxx xmlns="http://xd3.h?.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=""http://www.w3.org/2001/XMLSchema-instance">

提前感谢您的帮助。

out.write(x);之后添加以下行:

out.newLine();

这将添加缺少的马车 returns。

如果要复制文件的内容,请使用 Streams 而不是 Readers/Writers。

Streams在字节级操作,读写字节时没有解释。

Readers/Writers 在字符级别运行,在 reading/writing 期间可能会发生一些转换,尤其是字符集编码 and/or 行尾。

你也忘了输出行尾。

声明

x = in.readLine()

将一行的内容存储在变量x中。此字符串不包含任何换行符。如果你只是简单地将 x 的内容写入一个文件,使用

out.write(x)

你当然会失去所有的换行符。尝试将其更改为

out.write(x + "\n")

顺便说一下:你的 while 循环中的条件应该每隔一行就丢弃一次。这是故意的吗?

为什么要尝试逐行处理 XML 文件?使用一些 XML 框架似乎更合适。

另一个评论:您当前的代码看起来像是对 "TEE" 的奇怪重新实现。您确定有充分的理由重新实施它吗?