# Java `FileOutputStream`教程

原文：http://zetcode.com/java/fileoutputstream/

Java `FileOutputStream`教程显示了如何使用`FileOutputStream`类写入 Java 中的文件。

## Java `FileOutputStream`

`FileOutputStream`是用于将数据写入`File`或`FileDescriptor`的输出流。 `FileOutputStream`是`OutputStream`的子类，它接受输出字节并将其发送到某个接收器。 在`FileOutputStream`的情况下，接收器是文件对象。

## Java `FileOutputStream`构造器

这些是`FileOutputStream`构造器：

*   `FileOutputStream(File file)` - 创建文件输出流以写入`File`对象。
*   `FileOutputStream(File file, boolean append)` - 创建文件输出流以写入`File`对象； 允许附加模式。
*   `FileOutputStream(FileDescriptor fdObj)` - 创建文件输出流以写入指定的文件描述符。
*   `FileOutputStream(String name)` - 创建文件输出流以写入具有指定名称的文件。
*   `FileOutputStream(String name, boolean append)` - 创建文件输出流以写入具有指定名称的文件； 允许附加模式。

## Java `FileOutputStream`关闭

`FileOutputStream`的`close()`方法关闭文件输出流，并释放与此流关联的所有系统资源。 在我们的示例中，我们使用`try-with-resources`语句，该语句确保在语句末尾关闭每个资源。

## Java `FileOutputStream`写入

`FileOutputStream`使用以下写入方法写入字节：

*   `write(byte[] b)` - 将字节数组写入文件输出流。
*   `write(byte[] b, int off, int len)` - 从指定的字节数组开始将`len`个字节从`offset`偏移量写入文件输出流。
*   `write(int b)` - 将一个字节写入文件输出流。

## Java `FileOutputStream`示例

以下示例使用`FileOutputStream`将文本写入文件。

`FileOutputStreamEx.java`

```java
package com.zetcode;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamEx {

    public static void main(String[] args) throws FileNotFoundException, IOException {

        String fileName = "/home/janbodnar/tmp/newfile.txt";

        try (FileOutputStream fos = new FileOutputStream(fileName)) {

            String text = "Today is a beautiful day";
            byte[] mybytes = text.getBytes();

            fos.write(mybytes);
        }
    }
}

```

该代码示例将一行写入文件。

```java
try (FileOutputStream fos = new FileOutputStream(fileName)) {

```

`FileOutputStream`构造器采用字符串作为参数； 它是我们写入的文件名。 完成编写后，我们使用`try-with-resources`构造来清理资源。

```java
String text = "Today is a beautiful day";
byte[] mybytes = text.getBytes();

```

`FileOutputStream`将字节写入文件； 我们使用`getBytes()`方法从字符串中获取字节。

```java
fos.write(mybytes);

```

字节被写入文件。

```java
$ cat newfile.txt 
Today is a beautiful day

```

我们使用`cat`命令显示文件的内容。

## Java `FileOutputStream`附加到文件

使用`FileOutputStream`可以将数据附加到文件中。 附加的典型用法是日志记录。

`FileOutputStreamAppend.java`

```java
package com.zetcode;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamAppend {

    public static void main(String[] args) throws FileNotFoundException, IOException {        

        String fileName = "/home/janbodnar/tmp/newfile.txt";

        try (FileOutputStream fos = new FileOutputStream(fileName, true)) {

            String text = "Today is a beautiful day";
            byte[] mybytes = text.getBytes();

            fos.write(mybytes);
        }
    }
}

```

该代码示例将文本附加到文件。

```java
try (FileOutputStream fos = new FileOutputStream(fileName, true)) {

```

`FileOutputStream`的第二个参数表示我们将附加到文件中。

## Java `FileOutputStream`指定编码

`FileWriter`类是用于编写字符文件的 Java 便利类，它有一个严重的限制：它使用默认编码，并且不允许我们显式指定编码。 如果必须设置编码，则可以使用`OutputStreamWriter`和`FileOutputStream`。

`FileOutputStreamEncoding.java`

```java
package com.zetcode;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;

public class FileOutputStreamEncoding {

    public static void main(String[] args) throws FileNotFoundException, IOException {

        String fileName = "/home/janbodnar/tmp/newfile.txt";

        FileOutputStream fos = new FileOutputStream(fileName);

        try (OutputStreamWriter osw =  new OutputStreamWriter(fos, 
                StandardCharsets.UTF_8)) {

            String text = "Сегодня был прекрасный день.";

            osw.write(text);
        }
    }
}

```

该示例使用`OutputStreamWriter`将文本写入文件。 第二个参数是要使用的字符集。

```java
$ cat newwfile.txt 
Сегодня был прекрасный день.

```

我们显示文件的内容。

在本教程中，我们介绍了 Java `FileOutputStream`类。 您可能也对相关教程感兴趣： [Java `FileInputStream`教程](/java/fileinputstream/)， [Java `InputStream`教程](/java/inputstream/)， [Java 谓词教程](/java/predicate/)， [Java 文件时间](/articles/javafiletime/)， [Java `FileWriter`教程](/java/filewriter/)， [Java 附加到文件](/articles/javaappendtofile/)，[用 Java 读取文本文件](/articles/javareadtext/)，[用 Java 读写 ICO 图像](/articles/javaico/) 和 [Java 教程](/lang/java/)。