如何强制 Java 只写换行符?我正在使用 \n 获取 CRLF
How to force Java to write newline only? I'm getting CRLF with \n
[已解决]
看来我的应用程序没有问题。按照建议逐个读取字符不会显示任何 CR。
错误可能出在接收端(独立于我的应用程序),无论出于何种原因,它都会添加一个 0x0D 字符。
这仍然是如何仅放置 \n 的一个很好的例子。
[/已解决]
我的应用程序有一个奇怪的行为:
我只需要在每一行结尾加上一个 LF,据我所知,它应该是“\n”。
我仍然为每一行获取 CRLF(就好像我在写“\r\n”)。
该应用程序非常复杂,所以我在这里粘贴了一个示例代码
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_1\nStr_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 平台(强制)上使用带 Java6(强制)的 Eclipse。
是否有任何设置可能会干扰此操作?还是我遗漏了什么?
如果您只打算使用 Windows,您可以使用 13 和 10 作为行分隔符。
os.write(10);
os.write(13);
如果您必须注意管理跨平台行分隔符,我会使用这个:
System.getProperty("line.separator")
或者这样:
String.format("%n")
希望对您有所帮助
简直不敢相信,这段代码生成的文件带有 \r\n!
创建后立即使用十六进制转储工具(例如,您可以使用 "Tiny Hexer")检查文件,然后再使用任何其他工具处理文件。
可能你创建后用编辑器打开了文件,编辑器回信了\r\n?
你的程序是正确的。要进行测试,请在文件创建后添加此代码片段,即在 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
。
[已解决]
看来我的应用程序没有问题。按照建议逐个读取字符不会显示任何 CR。 错误可能出在接收端(独立于我的应用程序),无论出于何种原因,它都会添加一个 0x0D 字符。 这仍然是如何仅放置 \n 的一个很好的例子。
[/已解决]
我的应用程序有一个奇怪的行为:
我只需要在每一行结尾加上一个 LF,据我所知,它应该是“\n”。 我仍然为每一行获取 CRLF(就好像我在写“\r\n”)。
该应用程序非常复杂,所以我在这里粘贴了一个示例代码
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_1\nStr_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 平台(强制)上使用带 Java6(强制)的 Eclipse。
是否有任何设置可能会干扰此操作?还是我遗漏了什么?
如果您只打算使用 Windows,您可以使用 13 和 10 作为行分隔符。
os.write(10);
os.write(13);
如果您必须注意管理跨平台行分隔符,我会使用这个:
System.getProperty("line.separator")
或者这样:
String.format("%n")
希望对您有所帮助
简直不敢相信,这段代码生成的文件带有 \r\n!
创建后立即使用十六进制转储工具(例如,您可以使用 "Tiny Hexer")检查文件,然后再使用任何其他工具处理文件。
可能你创建后用编辑器打开了文件,编辑器回信了\r\n?
你的程序是正确的。要进行测试,请在文件创建后添加此代码片段,即在 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
。