[已解决]
似乎我的应用程序不是问题。按照建议逐个字符读取字符不会显示任何 CR。错误可能在接收器端(独立于我的应用程序),无论出于何种原因,它都会添加一个0x0D字符。尽管如此,这仍然可能是如何仅放置的一个很好的例子。
[/已解决]
我的应用程序中有一个奇怪的行为:
我只需要用一个 LF 结束每一行,据我所知,它应该是""。我仍然为每一行都得到 CRLF(就好像我在写"\r"一样)。
该应用程序非常复杂,所以我在这里粘贴了一个示例代码
private static final String STR1 = "Str_1";
private static final String STR2 = "Str_2";
private static final char NEW_LINE = (char)0x0A;
//private static final String NEW_LINE = "n";
public static void main(String[] args) {
//They all return CR+LF instead of LF only.
System.out.println("Str_1nStr_2");
System.out.print(STR1+NEW_LINE+STR2);
try{
FileOutputStream fos = new FileOutputStream("tests\newline_test.txt");
fos.write((STR1+NEW_LINE+STR2).getBytes()); //The case I'm mostly interested into
fos.close();
} catch (IOException e){
e.printStackTrace();
}
}
我在Windows平台上使用Eclipse和Java6(强制)。
是否有任何设置可能会搞砸这个?还是我错过了什么?
您的程序是正确的。要进行测试,请在创建文件后添加此代码片段,即在fos.close()
之后
FileInputStream fis = new FileInputStream("tests\newline_test.txt");
int read = -1;
while((read = fis.read())!=-1){
System.out.println(read);
}
fis.close();
输出应为:
Str_1
Str_2
Str_1
Str_283 116
114
95
49
10
83
116
114
95
50
请注意,您只能得到10
换行符。如果文件具有 CR,则输出也应包含 13
。
不敢相信,这段代码会生成一个带有 \r 的文件!
创建后立即使用十六进制转储工具(例如,您可以使用"Tiny Hexer")检查文件,然后再使用任何其他工具输入文件。
也许您在创建后使用编辑器打开了文件,并且编辑器写回了\r?
如果您只打算使用 Windows,则可以使用 13 和 10 作为行分隔符。
os.write(10);
os.write(13);
如果您必须注意管理跨平台行分隔符,我会使用它:
System.getProperty("line.separator")
或者这个:
String.format("%n")
希望对你有帮助