English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Java Управление потоком

Java Масивы

Java Ориентированность на объекты (I)

Java Ориентированность на объекты (II)

Java Ориентированность на объекты (III)

Обработка исключений Java

Java Списки (List)

Java Queue (очередь)

Java Map-сборники

Java Set-сборники

Java Ввод/вывод (I/O)

Java Reader/Writer

Другие темы Java

Класс Java OutputStreamWriter

В этом руководстве мы изучим Java OutputStreamWriter и его методы с помощью примеров.

Класс OutputStreamWriter пакета java.io может использоваться для преобразования данных в виде символов в данные в виде байтов.

Он наследует абстрактный класс Writer.

Класс OutputStreamWriter можно использовать вместе с другими потоками вывода. Он также известен как мост между потоками вывода и ввода символов. Это потому, что OutputStreamWriter преобразует символы в байты.

Например,某些字符需要2个字节存储在存储器中。Чтобы записать такие данные, мы можем использовать поток вывода, который преобразует символы в соответствующие байты и хранит их вместе.

Создание OutputStreamWriter

Чтобы создать OutputStreamWriter, нам нужно сначала импортировать пакет java.io.OutputStreamWriter. После импорта пакета мы можем создать поток вывода.

//Создание OutputStream
FileOutputStream file = new FileOutputStream(String path);
//创建一个OutputStreamWriter
OutputStreamWriter output = new OutputStreamWriter(file);

В данном примере мы создали OutputStreamWriter с именем output и FileOutputStream с именем файла.

Здесь мы используем defaultManager encoding для записи символов в поток вывода.

Но мы можем указать тип кодировки символов, используемый для записи данных (UTF8илиUTF16)。

//Создание OutputStreamWriter с указанием кодировки символов
OutputStreamWriter output = new OutputStreamWriter(file, Charset cs);

Здесь мы используем класс Charset для указания типа кодировки символов.

Методы OutputStreamWriter

Класс OutputStreamWriter предоставляет реализации различных методов из класса Writer.

Метод write()

  • write() -写入一个字符

  • write(char[] array) - записывает указанные символы из массива в写入器

  • write(String data) - записывает указанную строку в写入器

Пример: OutputStreamWriter записывает данные в файл

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
public class Main {
  public static void main(String args[]) {
    String data = "This is a line of text inside the file.";
    try {
      // 创建 FileOutputStream
      FileOutputStream file = new FileOutputStream("output.txt");
      //创建一个OutputStreamWriter
      OutputStreamWriter output = new OutputStreamWriter(file);
      //записать строку в файл
      output.write(data);
      //закрыть writer
      output.close();
    }
    catch (Exception e) {
      e.getStackTrace();
    }
  }
}

В предыдущем примере мы использовали файловый поток для создания потокового чтителя. Потоковый чтитель иoutput.txtСсылка на файл.

FileOutputStream file = new FileOutputStream("output.txt");
OutputStreamWriter output = new OutputStreamWriter(file);

Чтобы записать данные в файл, мы используем метод write().

Здесь, когда мы запускаем программу,output.txtФайл будет заполнен следующим содержимым.

This is a line of text inside the file.

getEncoding() метод

getEncoding() метод может быть использован для получения типа кодировки, используемой для записи данных в поток вывода. Например,

import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.io.FileOutputStream;
class Main {
  public static void main(String[] args) {
    try {
      // 创建一个输出流
      FileOutputStream file = new FileOutputStream("output.txt");
      // 创建具有默认编码的输出流阅读器
      OutputStreamWriter output1 = new OutputStreamWriter(file);
      // 创建指定编码的输出流阅读器
      OutputStreamWriter output2 = new OutputStreamWriter(file, Charset.forName("UTF8"));
      // 返回输出流的字符编码
      System.out.println("output1的字符编码: " + output1.getEncoding());
      System.out.println("output2的字符编码: " + output2.getEncoding());
      // 关闭 reader
      output1.close();
      output2.close();
    }
    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

Результат вывода

Кодировка символов output1: Cp1252
Кодировка символов output2: UTF8

В примере выше мы создали 2 потока writer, названные output1 и output2.

  • output1 не указать кодировку символов. Поэтому метод getEncoding() возвращает стандартную кодировку символов.

  • output2 указать кодировку символовUTF8. Поэтому метод getEncoding() возвращает указанную кодировку символов.

Внимание: Мы уже использовали метод Charset.forName() для указания типа кодировки символов.

Метод close()

Чтобы закрыть поток writer, мы можем использовать метод close(). После вызова метода close() данные writer больше не могут быть записаны.

Другие методы OutputStreamWriter

МетодОписание
flush()Принудительно записать все данные, находящиеся в writer, в соответствующее место назначения
append()Вставить указанный символ в текущий writer