哪个OutputStream子类写入文本文件

Yok*_*hen 4 java ascii outputstream file

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

我使用哪一种?

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

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

课程概述

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

Bal*_*usC 5

  • ByteArrayOutputStream是要写入的字节到内存中byte[].
  • FileOutputStream是写字节到File.
  • FilterOutputStream是用于预先处理数据的更具体输出流的通用超类,例如加密/解密,计算校验和,字符编码,压缩(压缩)等.它本身没什么特别的.
  • ObjectOutputStream完整的Java类型和对象以序列化形式写入字节流.它基本上允许将复杂的Java对象转换为原始字节,反之亦然.
  • OutputStream只是这些流的常见抽象类.无论如何你无法构建它.但是你可以宣布反对它.
  • PipedOutputStream被intented要能写另一个InputStream在管道,使对方能够从阅读它们InputStream.

你想把数据写成a File,所以FileOutputStream绰绰有余.

OutputStream output = new FileOutputStream("/foo.txt");

try {
    output.write(text.getBytes());
} finally {
    output.close();
}
Run Code Online (Sandbox Code Playgroud)

请注意,String#getBytes()使用平台默认编码将字符转换为字节.如果您使用的"特殊字符"至少不包含ASCII,则应始终使用明确指定字符集String#getBytes(charset).例如:

    output.write(text.getBytes("UTF-8"));
Run Code Online (Sandbox Code Playgroud)

然而,与具体问题无关,通常的做法是使用a Writer来编写字符数据.

如果您不关心字符编码,请使用FileWriter:

Writer writer = new FileWriter("/foo.txt");

try {
    writer.write(text);
} finally {
    writer.close();
}
Run Code Online (Sandbox Code Playgroud)

它将使用平台默认字符编码,通常也支持ASCII字符.

如果您关心字符编码,请使用OutputStreamWriter:

Writer writer = new OutputStreamWriter(new FileOutputStream("/foo.txt"), "UTF-8");
// ...
Run Code Online (Sandbox Code Playgroud)

它允许您在获取时将charset指定为第二个参数OutputStream.

也可以看看: