Класс OutputStreamWriter
Класс OutputStreamWriter является мостом между потоком символов
и потоком байтов. Он наследуется от класса Writer и преобразует
записываемые символы в байты с помощью указанной кодировки.
В первый параметр конструктора мы передаем объект OutputStream,
в который будут записываться байты, во второй параметр - кодировку
(объект Charset или её имя в виде строки). Если кодировка
не указана, используется кодировка по умолчанию.
Синтаксис
new OutputStreamWriter(OutputStream out)
new OutputStreamWriter(OutputStream out, Charset cs)
new OutputStreamWriter(OutputStream out, String charsetName)
Пример
Давайте запишем строку в файл, преобразовав символы в байты
с помощью кодировки UTF-8:
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
public class Main
{
public static void main(String[] args)
{
try (Writer writer = new OutputStreamWriter(
new FileOutputStream("test.txt"),
StandardCharsets.UTF_8))
{
writer.write("abcde");
writer.flush();
System.out.println("done");
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
Результат выполнения кода:
"done"
Пример
Давайте укажем кодировку в виде строки "ISO-8859-1"
и запишем несколько символов:
import java.io.ByteArrayOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
public class Main
{
public static void main(String[] args)
{
try
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(out, "ISO-8859-1");
writer.write("12345");
writer.flush();
String res = out.toString("ISO-8859-1");
System.out.println(res);
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
Результат выполнения кода:
"12345"
Пример
Давайте обернем OutputStreamWriter в BufferedWriter
для буферизованной записи и выведем результат в консоль:
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
public class Main
{
public static void main(String[] args)
{
try (Writer writer = new BufferedWriter(
new OutputStreamWriter(System.out, StandardCharsets.UTF_8)))
{
writer.write("abcde");
writer.newLine();
writer.flush();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
Результат выполнения кода:
"abcde"
Смотрите также
-
класс
InputStreamReader,
который преобразует поток байтов в поток символов -
класс
OutputStream,
который представляет поток вывода байтов -
класс
Writer,
который представляет поток вывода символов -
метод
write,
который записывает символы в поток