下面的程序应该打印String
“Humpty Dumpty坐在墙上,\ n Humpty Dumpty坠落很大。”到一个文件并输回。
package io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
public class ByteIO {
/**
* @param args
*/
public static void main(String[] args) {
String output = "Humpty Dumpty sat on a wall,\n Humpty Dumpty had a great fall.";
System.out.println("Output String : " + output);
try(PrintStream out = new PrintStream("F:\\Test.txt")) {
out.println(output);
} catch(FileNotFoundException e) {
e.printStackTrace();
}
String input = "";
try(FileInputStream in = new FileInputStream("F:\\Test.txt")) {
while(in.read() != -1)
input += (char)in.read();
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
System.out.println("Input String : " + input);
}
}
然而,我从String
获得的FileInputStream
是“upyDmt a a nawl,upyDmt a ra al?”!此外,当我打开文件“Test.txt”时,我发现输出String
变成了“Humpty Dumpty坐在墙上,Humpty Dumpty坠落了。”在一条线上。 \n
去了哪里?
答案 0 :(得分:4)
您正在拨打in.read()
两次:
while(in.read() != -1)
input += (char)in.read();
每次迭代而不是一次读取两个字符,因此每次都有效地丢弃一个字符。
尝试将字符存储在while条件中,然后将该字符添加到input
:
编辑:基于JavaNewbie_M107的评论
int i;
while((i = in.read()) != -1)
input += (char)i;
答案 1 :(得分:1)
对于第二部分,Windows(以及记事本等许多应用程序)无法识别\ n作为新行。在Windows中,\ r \ n标记一个新行。尝试使用更严肃的编辑程序打开(写字板应该足够),你会看到它格式正确。
答案 2 :(得分:0)
正如亨特所说,你需要将你的代码改为
char c;
while((c=in.read()) != -1)
input += c;
答案 3 :(得分:0)
这是解决我问题的正确方法:
int i = 0;
char c;
do {
c = (char)i;
input += c;
i = in.read();
} while(i != -1);
使用.trim()
方法删除前面的额外空格。