如何在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。
如果要复制文件的内容,请使用 Stream
s 而不是 Reader
s/Writer
s。
Stream
s在字节级操作,读写字节时没有解释。
Reader
s/Writer
s 在字符级别运行,在 reading/writing 期间可能会发生一些转换,尤其是字符集编码 and/or 行尾。
你也忘了输出行尾。
声明
x = in.readLine()
将一行的内容存储在变量x
中。此字符串不包含任何换行符。如果你只是简单地将 x
的内容写入一个文件,使用
out.write(x)
你当然会失去所有的换行符。尝试将其更改为
out.write(x + "\n")
顺便说一下:你的 while 循环中的条件应该每隔一行就丢弃一次。这是故意的吗?
为什么要尝试逐行处理 XML 文件?使用一些 XML 框架似乎更合适。
另一个评论:您当前的代码看起来像是对 "TEE" 的奇怪重新实现。您确定有充分的理由重新实施它吗?
我正在尝试读取一个 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。
如果要复制文件的内容,请使用 Stream
s 而不是 Reader
s/Writer
s。
Stream
s在字节级操作,读写字节时没有解释。
Reader
s/Writer
s 在字符级别运行,在 reading/writing 期间可能会发生一些转换,尤其是字符集编码 and/or 行尾。
你也忘了输出行尾。
声明
x = in.readLine()
将一行的内容存储在变量x
中。此字符串不包含任何换行符。如果你只是简单地将 x
的内容写入一个文件,使用
out.write(x)
你当然会失去所有的换行符。尝试将其更改为
out.write(x + "\n")
顺便说一下:你的 while 循环中的条件应该每隔一行就丢弃一次。这是故意的吗?
为什么要尝试逐行处理 XML 文件?使用一些 XML 框架似乎更合适。
另一个评论:您当前的代码看起来像是对 "TEE" 的奇怪重新实现。您确定有充分的理由重新实施它吗?