0

我要做的就是从记事本中读取字符并将其转换为字节并将其保存为另一个文件。

“a.txt”在记事本中包含简单的文本“Hello World!”

但是,在“b.txt”中,我仍然看到人类可读的字符而不是字节值。我还注意到,当我执行 a 时System.out.print(ba),它会打印字节。

谁能告诉我为什么 Java 不将字节值写入“b.txt”?

import java.io.*;

class a {
    static int f;
    static String s;

    public static void main(String args[]) 
    throws IOException {
        BufferedReader  br = new BufferedReader(new FileReader ("a.txt"));
        BufferedOutputStream w = new BufferedOutputStream(new FileOutputStream("b.txt"));

        byte ba[] = new byte[1024];

        while((s=br.readLine())!=null) {
            ba = s.getBytes();
            System.out.print(ba);
            w.write(ba);
        }
    w.flush();
    w.close();
    br.close();
    }
}
4

3 回答 3

1

您正在将原始字节值写入文件。
记事本将它们读取为 ASCII 文本。

如果您在十六进制编辑器中打开任一文件,您将看到实际的字节值。

如果您想在记事本中查看字节值,您需要将每个字节作为字符串打印到文件中,通常用空格分隔,以便您可以看到每个字节。

于 2012-09-02T21:14:20.930 回答
1

您正在将 a.txt 逐字节复制到 b.txt 中。当然它会显示为文本,为什么不呢?如果您真的想在使用它之后在文本编辑器中查看字节,则必须先将字节转换为表示它们的文本,然后将其写出来。将 ba 转换为整数并使用 Integer.toBinaryString 将字节更改为文本,然后将其写出。这样,您可以在文本编辑器中打开结果并将字节视为文本(0 和 1)。

于 2012-09-02T21:23:21.030 回答
1

返回一个字节数组,因此getBytes()您应该遍历此数组并将其写入文件

   while((s=br.readLine())!=null) {
        ba[]= s.getBytes();
        for (int i=0;i<ba.lenght;i++){
           w.writeInt(ba[i]);
        }            
    }

代码未测试

于 2012-09-02T21:24:20.047 回答