将十进制/十六进制写入文件,而不是字符串

6

如果我有一个文件,我想要字面上向其中写入“42”(值而不是字符串),例如16进制中的2a,我该怎么做?我希望能够使用类似outfile.write(42)或outfile.write(2a)的东西,而不是将字符串写入文件。

4个回答

9
要写入二进制数据,您需要使用OutputStream(例如FileOutputStream)。
如果发现您的数据被写入为字符串,则可能正在使用Writer(例如FileWriter或包装在FileOutputStream周围的OutputStreamWriter)。所有命名为“*Writer”或“*Reader”的内容都仅处理文本/String。如果要写入二进制数据,则应避免使用这些内容。
如果要写入不同的数据类型(而不仅仅是纯粹的byte),则应查看DataOutputStream

啊!只晚了一秒钟。干得好! :) - vpram86
只是一个有趣的旁注:看看java.util.zip.*类,它们提供即时压缩。您可以将它们传递给DataOutputStream构造函数并节省相当多的磁盘IO。 - Otto Allmendinger

2
    OutputStream os = new FileOutputStream(fileName);
    String text = "42";
    byte value = Byte.parseByte(text);
    os.write(value);
    os.close();

1
如果你只是想写字节,以下代码就足够了:
import java.io.*;
...
OutputStream out = new FileOutputStream("MyFile");
try {
    // Write one byte ...
    out.write((byte) 42);
    // Write multiple bytes ...
    byte[] bytes = ...
    int nosWritten = out.write(bytes, 0, bytes.length);

} finally {
    out.close();
}

异常处理留给读者自己练习 :-)


实际上,如果你想写整个数组,那么"out.write(bytes)"就可以了,你不需要使用三个参数的版本。 - Joachim Sauer
@Joachim:我知道。这只是一个例子。 - Stephen C

1

这里不需要使用DataOutputStream。 - Jon Skeet
你能解释一下为什么吗?不管怎样,我只是说他可以使用它。 :) - vpram86
如果您想写入字节,那么任何OutputStream都可以。只有当您想直接写入整数/长整数/浮点数/双精度数等时,才可以使用DataOutputStream将其转换为字节。 - Joachim Sauer
1
我冒昧地更新了链接,指向当前版本的文档。有太多链接指向古老的文档了;-) - Joachim Sauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接