【问题标题】:Write int to text file using Writer使用 Writer 将 int 写入文本文件
【发布时间】:2011-09-09 06:23:46
【问题描述】:
Writer wr = new FileWriter("123.txt");
wr.write(123);
wr.close();

输出文件包含:
{

问题出在哪里?如何使用Writerint写入文本文件?

【问题讨论】:

    标签: java


    【解决方案1】:

    你必须写字符串...

    你可以试试。

    wr.write("123");
    

    wr.write(new Integer(123).toString());
    

    wr.write( String.valueOf(123) );
    

    【讨论】:

    • 为什么我必须将 int 123 设为 Integer 的对象类型? Dosent java 已经知道这是一个 int 值,因此应该能够将其转换为字符串? Obj 之间有什么区别。整数和 int 数据类型?
    • @AshwinGupta 和其他人想知道,这是因为方法 wr.write(int) 实际上并没有写入 int 本身,它以指定的编码写入 int 表示的字符(utf-8 if未指定)。因此 int 被映射到其他字符,使其成为一个对象并获取它的字符串强制它写下实际的整数,否则自动装箱或拆箱会将其转换回原始 int。见:docs.oracle.com/javase/7/docs/api/java/io/…
    【解决方案2】:

    还有一种非常简单的方法可以使用 FileWriter 将整数写入文件:

    Writer wr = new FileWriter("123.txt");
    wr.write(123 + "");
    wr.close();
    

    + "" 将整数与空字符串连接起来,从而将整数解析为字符串。非常容易做和记住。

    【讨论】:

      【解决方案3】:

      Javadocs 是你的朋友:

      编写字符文件的便利类。

      } 是 ASCII 值为 123 的字符。

      如果您想将123 的文本表示形式写入此文件,您需要这样做:

      wr.write(Integer.toString(123));
      

      【讨论】:

        【解决方案4】:

        123 = 0x7b = { 的 ascii 代码,因此您正在将字符写入文件。 使用toString()方法将值转换为字符串并输出。

        【讨论】:

          【解决方案5】:

          我过去在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));
          

          【讨论】:

            【解决方案6】:

            问题在于Writer.write 用于将单个字符发送到输出。目前尚不清楚为什么它是 int 而不是 char,诚然 - 如果您可以使用它来发送非 BMP 字符,那将是有意义的,但 documentation 声明:

            写入单个字符。要写入的字符包含在给定整数值的低 16 位中;忽略高 16 位。

            您需要先将整数转换为字符串,例如

            int v = 123; // I'm assuming this is dynamic in reality
            wr.write(String.valueOf(v));
            

            【讨论】:

              【解决方案7】:

              还有一种方法:

              wr.write(""+123); //immediately convert int to its String representation
              

              wr.write(""+i);
              

              但我不知道它与其他方法相比对性能有何影响,但它编写起来更简单一些。 :)

              PS:对不起,我的英语可能不好

              【讨论】:

                【解决方案8】:

                这就是你正在尝试的。看这个。

                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 字符是 {

                谢谢

                【讨论】:

                  猜你喜欢
                  • 2013-10-23
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-12-13
                  • 1970-01-01
                  • 2014-05-12
                  • 1970-01-01
                  • 2023-02-02
                  • 1970-01-01
                  相关资源
                  最近更新 更多