哪个OutputStream子类写入文本文件

时间:2011-11-07 01:05:02

标签: java file ascii outputstream

我正在编写一个程序,将数据输出到.txt文件,可以由一个人使用NotePad等程序读取。 也许不一定是ASCII,但用户可以理解的东西。

我使用哪一种?

  • ByteArrayOutputStream
  • FileOutputStream中
  • FilterOutputStream中
  • 的ObjectOutputStream
  • 的OutputStream
  • 的PipedOutputStream

我有这个赋值,要求我专门使用一个OutputStream子类,所以Writer不是一个选项。

课程概述

  • ByteArrayOutputStream 在BalusC给出更简单的描述之前,他们并不理解。显然,它将事物存储在一个字节数组中,因为它们是特殊的字节,因此无法读取。
  • FileOutputStream 它会将输出变为字节,因此也无法读取。
  • FilterOutputStream 我认为它以我不理解的方式转换数据。当你只是想在程序中写东西时写东西不好。
  • ObjectOutputStream 根据“原始数据类型也可以使用DataOutput中的相应方法写入流中。字符串也可以使用writeUTF方法编写。”并且提供的示例可能就是答案,但是再次这么多解释再次让我感到困惑。
  • OutputStream 根本不理解说明。
  • PipedOutputStream 它会创建二进制数据管道。什么是管道?不是线索。

3 个答案:

答案 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有什么问题吗?