我想要做的就是从记事本中读取字符并将其转换为字节并将其保存为另一个文件。
“a.txt”在记事本“Hello World!”中有简单的文字。
但是,在“b.txt”中,我仍然看到人类可读的字符而不是字节值。我还注意到,当我执行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();
}
}
答案 0 :(得分:1)
您正在将原始字节值写入文件 记事本将它们读作ASCII文本。
如果在十六进制编辑器中打开任一文件,您将看到实际的字节值。
如果要在记事本中查看字节值,则需要将每个字节作为字符串打印到文件中,通常用空格分隔,以便您可以看到每个字节。
答案 1 :(得分:1)
您将a.txt逐字节复制到b.txt中。当然它会以文字形式出现,为什么不呢?如果你真的想在使用它之后在文本编辑器中看到字节,你必须先将字节转换为代表它们的文本,然后将其写出来。将ba转换为整数并使用Integer.toBinaryString将字节更改为文本,然后将其写出。这样你就可以在文本编辑器中打开结果,并将字节看作文本(0和1)。
答案 2 :(得分:1)
getBytes()
返回一个字节数组,因此您应该遍历此数组并将其写入文件
while((s=br.readLine())!=null) {
ba[]= s.getBytes();
for (int i=0;i<ba.lenght;i++){
w.writeInt(ba[i]);
}
}
未经过测试的代码