Java \n元';不工作,不去新的生产线

Java \n元';不工作,不去新的生产线,java,store,text-files,Java,Store,Text Files,我正在创建一个小程序,它将int值保存到一个文本文件中,保存它,并在再次启动程序时加载它。现在,我需要在文本文件中存储3个布尔值,我正在用 public Formatter x; x.format("%s", "" + m.getPoints() + "\n"); 每当我想转到文本文件中的新行时,\n它不会转到新行,而是直接在int值后面写入。我两个都试过了 x.format("%s", "" + m.getPoints() + "\n"); x.format

我正在创建一个小程序,它将int值保存到一个文本文件中,保存它,并在再次启动程序时加载它。现在,我需要在文本文件中存储3个布尔值,我正在用

    public Formatter x;

x.format("%s", "" + m.getPoints() + "\n");
每当我想转到文本文件中的新行时,\n它不会转到新行,而是直接在int值后面写入。我两个都试过了

        x.format("%s", "" + m.getPoints() + "\n");
    x.format("%s", "" + m.getStoreItem1Bought() + "\n");

但是,两者都将只在int值后面直接写入布尔值,而无需换行。有什么帮助吗


我使用的是Windows 7 Ultimate 64位,我的文本编辑器是Eclipse,我也使用Eclipse运行所有代码。

使用格式时,尝试使用
%n
而不是
\n
。有关此操作的详细信息,请参阅并在本页中搜索“行分隔符”,您将看到。

使用此选项:

public static String newline = System.getProperty("line.separator");
这两种选择都有效。您的问题在于如何格式化输出:

System.out.format("%s" + newline + "%s" + newline, "test1", "test2");
System.out.format("%s%n%s", "test1", "test2");
输出:

test1
test2
test1
test2

好吧,你的语法肯定很正确。。有趣。如果只是将字符串拼凑在一起,为什么要使用格式化方法?此外,由于你没有说你使用的是什么流,我们不得不猜测一点,但无论如何

不管怎样,我打赌是1。您正在使用windows和2。您使用的编辑器(我打赌是记事本)只会对\r\n作出反应,因为这是Windows的正确换行符。要解决此问题,请不要在代码中硬编码,而是使用%n并正确使用printf函数(即不要将字符串拼凑在一起!)

否则,如果你真的要把绳子拼凑在一起:

String newline = System.getProperty("line.separator");
x.format("%s", "" + m.getPoints() + newline);

将起作用。

更具体地说,我建议使用:

x.format("%d%n%s%n", m.getPoints(), m.getStoreItem1Bought());
这里没问题:

System.out.format ("first: %s%s", "" + x + "\n", "" + y + "\n");
虽然我更愿意将\n集成到格式字符串中,但不集成值:

System.out.format ("second: %s\n%s\n", x, y);

使用Formatter.format也一样。

您使用的是Windows系统吗?
\n
将插入换行符,而不是系统相关的换行符。在窗口上,回车符后跟换行符。这可能会使它看起来好像没有任何介于两者之间的东西,但只有少数程序需要
\r\n
,我遇到的所有程序都将lone
\n
显示为一个长方体字符(这不是所描述的行为)。奇怪。我在Windows XP上使用Eclipse,它只在
\n
上运行良好。不过这可能是我的代码,我是一个新的程序员,犯了很多小错误。但是,我现在让它工作了。它将3nullfalsenull输出到我的文本文件中,也不起作用。这真的应该起作用。除非在
换行符
赋值之前在类初始化中执行输出。我的错误。我以为您使用的是Formatter类的一个变体,如PrintStream的printf方法。这只适用于
%n
格式设置程序的格式化字符串部分,而不适用于参数。@maaartinus:yep。我将很快删除此答案,并已投票选出其他更好的答案。我认为不应删除您的答案!这是处理新线疯狂的最明智的方式(除了完全忽略它,这并不总是适用)。我的评论只是对OP的使用说明,而不是对您的答案的批评。更好的是:
x.format((本地)(null),%d%n%s%n',m.getPoints(),m.getStoreItem1bound())。第一个
null
参数将阻止应用任何本地化。这起作用,将其放在新的行上,感谢您的帮助。不要使用\n-这仅在Linux系统(和现代Mac)上可靠工作。%n或System.getProperty(“line.separator”)是正确的版本。如果解决方案不需要更多的工作,则无需编写不可移植的代码。这取决于您喜欢对产品做什么。如果需要“\n”,请使用“\n”;如果需要便携式输出,请使用“%n”。现代编辑器(记事本除外,记事本并不现代)通常可以处理两种形式的输入。
System.out.format ("second: %s\n%s\n", x, y);