Метод close
Метод close класса OutputStream закрывает поток вывода
и освобождает системные ресурсы, связанные с этим потоком.
После вызова метода close запись в поток становится невозможной
и попытка вызвать методы write или flush приведет
к исключению IOException. Метод не принимает параметров
и не возвращает результата. Если поток уже был закрыт ранее,
повторный вызов close не дает никакого эффекта.
Метод close объявлен в абстрактном классе OutputStream
и реализуется конкретными подклассами, такими как
FileOutputStream, ByteArrayOutputStream
и другими. При работе с потоками вывода рекомендуется
использовать конструкцию try-with-resources, которая
автоматически вызывает close по завершении работы.
Синтаксис
outputStream.close()
Пример
Давайте создадим поток вывода в файл, запишем в него
строку и закроем поток с помощью метода close:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Main
{
public static void main(String[] args)
{
try
{
OutputStream os = new FileOutputStream("test.txt");
byte[] data = "abcde".getBytes();
os.write(data);
os.close();
System.out.println("stream closed");
}
catch (IOException e)
{
System.out.println("error: " + e.getMessage());
}
}
}
Результат выполнения кода:
"stream closed"
Пример
Давайте посмотрим, что произойдет при попытке записи в уже закрытый поток:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Main
{
public static void main(String[] args)
{
try
{
OutputStream os = new ByteArrayOutputStream();
os.write("abcde".getBytes());
os.close();
os.write("12345".getBytes());
System.out.println("write after close");
}
catch (IOException e)
{
System.out.println("error: " + e.getMessage());
}
}
}
Результат выполнения кода:
"error: Stream Closed"
Пример
Давайте используем конструкцию try-with-resources, которая автоматически закрывает поток:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Main
{
public static void main(String[] args)
{
try (OutputStream os = new ByteArrayOutputStream())
{
os.write("abcde".getBytes());
os.flush();
System.out.println("write done");
}
catch (IOException e)
{
System.out.println("error: " + e.getMessage());
}
}
}
Результат выполнения кода:
"write done"
Смотрите также
-
класс
OutputStream,
который является базовым классом для потоков вывода -
метод
write,
который записывает байты в поток вывода -
метод
flush,
который принудительно записывает данные из буфера -
класс
FileOutputStream,
который записывает байты в файл