我正在编写一个程序,将数据输出到.txt文件,可以由一个人使用NotePad等程序读取。 也许不一定是ASCII,但用户可以理解的东西。
我使用哪一种?
我有这个赋值,要求我专门使用一个OutputStream子类,所以Writer不是一个选项。
课程概述
答案 0 :(得分:5)
ByteArrayOutputStream
是将字节写入内存中byte[]
。FileOutputStream
是将字节写入File
。FilterOutputStream
是用于预先处理数据的更具体输出流的常见超类,例如加密/解密,计算校验和,字符编码,压缩(压缩)等。它本身没什么特别的。ObjectOutputStream
以序列化的形式将完整的Java类型和对象写入字节流。它基本上允许将复杂的Java对象转换为原始字节,反之亦然。OutputStream
只是这些流的常见抽象类。无论如何你无法构建它。但是你可以宣布反对它。PipedOutputStream
希望能够写入管道中的另一个InputStream
,以便对方可以从InputStream
读取它们。您希望将数据简单地写为File
,因此FileOutputStream
绰绰有余。
OutputStream output = new FileOutputStream("/foo.txt");
try {
output.write(text.getBytes());
} finally {
output.close();
}
请注意String#getBytes()
使用平台默认编码将字符转换为字节。如果您使用的“特殊字符”至少不包含ASCII,则应始终使用String#getBytes(charset)
明确指定字符集。 E.g:
output.write(text.getBytes("UTF-8"));
不相关到具体问题,正常练习是使用Writer
来编写字符数据。
如果您不关心字符编码,请使用FileWriter
:
Writer writer = new FileWriter("/foo.txt");
try {
writer.write(text);
} finally {
writer.close();
}
它将使用平台默认字符编码,通常也支持ASCII字符。
如果您关心字符编码,请使用OutputStreamWriter
:
Writer writer = new OutputStreamWriter(new FileOutputStream("/foo.txt"), "UTF-8");
// ...
它允许您在获取OutputStream
时将字符集指定为第二个参数。
答案 1 :(得分:1)
使用PrintStream。它是OutputStream的子类,允许逐行输出。它与System.out
中使用的类相同new PrintStream(new File("path/to/your/file.txt")).println("Your output");
答案 2 :(得分:0)
FileOutputStream有什么问题吗?