【发布时间】:2011-09-09 06:23:46
【问题描述】:
Writer wr = new FileWriter("123.txt");
wr.write(123);
wr.close();
输出文件包含:{
问题出在哪里?如何使用Writer将int写入文本文件?
【问题讨论】:
标签: java
Writer wr = new FileWriter("123.txt");
wr.write(123);
wr.close();
输出文件包含:{
问题出在哪里?如何使用Writer将int写入文本文件?
【问题讨论】:
标签: java
你必须写字符串...
你可以试试。
wr.write("123");
或
wr.write(new Integer(123).toString());
或
wr.write( String.valueOf(123) );
【讨论】:
wr.write(int) 实际上并没有写入 int 本身,它以指定的编码写入 int 表示的字符(utf-8 if未指定)。因此 int 被映射到其他字符,使其成为一个对象并获取它的字符串强制它写下实际的整数,否则自动装箱或拆箱会将其转换回原始 int。见:docs.oracle.com/javase/7/docs/api/java/io/…
还有一种非常简单的方法可以使用 FileWriter 将整数写入文件:
Writer wr = new FileWriter("123.txt");
wr.write(123 + "");
wr.close();
+ "" 将整数与空字符串连接起来,从而将整数解析为字符串。非常容易做和记住。
【讨论】:
Javadocs 是你的朋友:
编写字符文件的便利类。
} 是 ASCII 值为 123 的字符。
如果您想将123 的文本表示形式写入此文件,您需要这样做:
wr.write(Integer.toString(123));
【讨论】:
123 = 0x7b = { 的 ascii 代码,因此您正在将字符写入文件。
使用toString()方法将值转换为字符串并输出。
【讨论】:
我过去在PrintStream 方面有过很好的体验。
PrintStream 可以有两种使用方式(至少)
PrintStream ps = new PrintStream("file_location.txt");
或
PrintStream ps = new PrintStream(new File("file_loc.txt"));
并写,使用:
ps.println("String text");
或
ps.println(Integer.parseInt(123));
【讨论】:
问题在于Writer.write 用于将单个字符发送到输出。目前尚不清楚为什么它是 int 而不是 char,诚然 - 如果您可以使用它来发送非 BMP 字符,那将是有意义的,但 documentation 声明:
写入单个字符。要写入的字符包含在给定整数值的低 16 位中;忽略高 16 位。
您需要先将整数转换为字符串,例如
int v = 123; // I'm assuming this is dynamic in reality
wr.write(String.valueOf(v));
【讨论】:
还有一种方法:
wr.write(""+123); //immediately convert int to its String representation
或
wr.write(""+i);
但我不知道它与其他方法相比对性能有何影响,但它编写起来更简单一些。 :)
PS:对不起,我的英语可能不好
【讨论】:
这就是你正在尝试的。看这个。
http://download.oracle.com/javase/1.4.2/docs/api/java/io/Writer.html#write(int)
这是我引用的 javadoc 中的方法名称,以防链接没有自动带你。
public void write(int c)
throws IOException
因此,123 的等效 ascii 字符是 {
谢谢
【讨论】: