Java BufferedWriter无法写入某些字符

时间:2013-07-04 23:18:14

标签: java bufferedwriter

我决定测试一下我能写多少个不同的角色。我试过这段代码:

for (int i = 0;i < 255;i++) {
    myBufferedWriter.write(i);
}

但是在文件中,使用我的十六进制编辑器,我看到它在第一个01, 02, 03...处正常计数,但随后它到达3F,写了大约20次,然后继续写正常。我不能写某些字符吗?我希望能够写出所有字符0-255。

完整代码:

public class Main {
    public static void main(String[] args) {
        try{
            BufferedWriter bw = new BufferedWriter(new FileWriter(new File("abc.txt")));
            for (int i = 0;i < 255;i++) {
                bw.write(i);
            }
            bw.close();
          }catch(Exception e){}
    }
}

2 个答案:

答案 0 :(得分:4)

我认为您的问题是您使用的是错误的API。当前代码发生的情况是,您的“字符”被视为文本,并使用您平台的默认字符编码进行编码。

如果要以二进制形式写入数据(例如,字节0到255),那么您应该使用OutputStream API。具体来说是BufferedOutputStream

例如:

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream(new File("abc.dat")));
        for (int i = 0; i < 255; i++) {
            bos.write(i);
        }
        bos.close();
    }
}

如果你想能够编写其他数据类型(二进制形式),那么DataOutputStream更合适......因为它有许多其他方法来编写基元类型等​​等。但是,如果您想有效地编写 ,则BufferedOutputStreamFileOutputStream之间需要DataOutputStream

答案 1 :(得分:0)

我明白了。我的新代码:

public class Main {
    public static void main(String[] args) {
        try{
            DataOutputStream dos = new DataOutputStream(new FileOutputStream(new File("abc.txt")));
            for (int i = 0;i < 255;i++)
                dos.writeByte(i);
            dos.close();
        }catch(Exception e){}
    }
}