import java.io.*;
public class TestFileWriter {
  public static void main(String[] args) {
    FileWriter fw = null;
    try {
      fw = new FileWriter("D:\\test\\ab.txt");
      for(int c=0;c<=50000;c++){
        fw.write(c); //为啥写入的不是数字?
      }
      fw.close();
    } catch (IOException e1) {
     e1.printStackTrace();
      System.out.println("文件写入错误");
      System.exit(-1);
    }
  }
}API 上的说明是:writepublic void write(int c)
           throws IOException写入单个字符。要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。
如注释,为啥写入的是 int  , 而输出的却不是?  

解决方案 »

  1.   

    char类型是16位的,char实际上实现的是Unicode码,int是32位,但这里16 高位被忽略,只有低16位了,
    16位的int就会和char一一对应了,所以输出的是字符了
      

  2.   


    我知道int 是32位 ,char16位,我想知道他为啥不直接些int,而要写入char
      

  3.   

    int毕竟是整型,char才是字符嘛
      

  4.   


    只能写入char,而不能写入int吗?
      

  5.   


    你想写入数字,可以用write(String str, int off, int len) ,比如string  s="123";
      

  6.   

    public void write(int c) throws IOException {
    synchronized (lock) {
        if (writeBuffer == null){
    writeBuffer = new char[writeBufferSize];
        }
        writeBuffer[0] = (char) c;
        write(writeBuffer, 0, 1);
    }
        }
    因为被强制转换成char了
      

  7.   

    Writer 是字符流啊,又不是数字流,写入字符是理所当然的,呵呵。
      

  8.   

    可以重Write和PrintWrite的区别入手,你就明白了。
      

  9.   

    java IO的类分为两种,字符流操作和二进制流操作,FileWriter,bufferedWritter这些都是字符流操作的类,写进去都是一个个的char,FileInputStream,InputStream这些是二进制流,写进去的都是一个个的byte
    没有直接写整数的io操作流类。。
      

  10.   

    输入的是整数,输出却是按字符输出的,也就是那个整数对应的ASCII字符或Unicode字符,
    用记事本打开应该是乱码
      

  11.   

    想写入整数,可以用new DataOutStream(new FileOutputStream("D:\\test\\ab.txt"));