Автор оригинала: Pankaj Kumar.
Класс Java FileOutputStream является частью java.io посылка. Сегодня мы подробно рассмотрим конструкторы и методы класса FileOutputStream с примерами кодов.
1. Поток вывода файлов Java
- FileOutputStream-это поток вывода для записи данных в файл или файловый дескриптор.
- FileOutputStream используется для записи потоков необработанных байтов, таких как данные изображения. Его хорошо использовать с байтами данных, которые не могут быть представлены в виде текста, таких как PDF, документы Excel, файлы изображений и т.д.
- Класс FileOutputStream является подклассом класса
OutputStream.
2. Иерархия классов FileOutputStream
3. Конструкторы потока вывода файлов
FileOutputStream предоставляет методы для записи байтов в файл, и мы можем создать экземпляр FileOutputStream, используя приведенные ниже конструкторы.
Поток вывода файлов(файловый файл): Создает поток вывода файлов для записи в файл, представленный указанным файловым объектом. Если файл существует, но является каталогом, а не обычным файлом, не существует, но не может быть создан или не может быть открыт по какой-либо другой причине, то возникает исключениеFileNotFoundException.Поток вывода файла(файл файла, логическое добавление): Создает поток вывода файла для записи в файл, представленный указанным объектом файла. Если второй аргумент верен, то байты будут записываться в конец файла, а не в начало. Если файл существует, но является каталогом, а не обычным файлом, не существует, но не может быть создан или не может быть открыт по какой-либо другой причине, то создается исключение FileNotFoundException.Поток вывода файлов (FileDescriptor fdObj): Создает поток вывода файлов для записи в указанный дескриптор файла, который представляет существующее соединение с фактическим файлом в файловой системе.Поток вывода файла (имя строки): Создает поток вывода файла для записи в файл с указанным именем.Поток вывода файла (имя строки, логическое добавление): Создает поток вывода файла для записи в файл с указанным именем. Если второй аргумент верен, то байты будут записываться в конец файла, а не в начало. Если файл существует, но является каталогом, а не обычным файлом, не существует, но не может быть создан или не может быть открыт по какой-либо другой причине, то возникает исключениеFileNotFoundException.
4. Методы потока вывода файлов Java
Давайте взглянем на приведенные ниже методы класса FileOutputStream.
close(): Этот метод закрывает поток вывода этого файла и освобождает все системные ресурсы, связанные с потоком.finalize(): Этот метод очищает соединение с файлом и гарантирует, что метод close() этого потока вывода файла вызывается, когда на него больше нет ссылок.getChannel(): Этот метод возвращает уникальный объект FileChannel, связанный с этим потоком вывода файла. Начальная позиция возвращаемого канала будет равна количеству байтов, записанных в файл, и запись байтов в этот поток увеличит позицию канала.getFD(): Этот метод возвращает объект FileDescriptor, представляющий соединение с фактическим файлом в файловой системе, используемой этим объектом FileOutputStream.запись(байт[] b): Этот метод записывает байты b.длины из указанного массива байтов в этот поток вывода файла.запись(байт[] b, int off, int len): Этот метод записывает байты len из указанного массива байтов, начиная со смещения off, в этот поток вывода файла.запись(int b): Этот метод записывает указанный байт в поток вывода этого файла. Реализует метод записи OutputStream.
5. Запись Java в файл с помощью FileOutputStream
package com.journaldev.examples;
import java.io.File;
import java.io.FileOutputStream;
/**
* Java write file using FileOutputStream
*
* @author pankaj
*
*/
public class FileOutputStreamWrite {
public static void main(String[] args) {
File file = null;
FileOutputStream fileOutputStream = null;
String data = "Hello World.";
try {
file = new File("D:/data/file.txt");
fileOutputStream = new FileOutputStream(file);
//create file if not exists
if (!file.exists()) {
file.createNewFile();
}
//fetch bytes from data
byte[] bs = data.getBytes();
fileOutputStream.write(bs);
fileOutputStream.flush();
fileOutputStream.close();
System.out.println("File written successfully.");
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (fileOutputStream != null) {
fileOutputStream.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
Java 7 предоставляет try с ресурсом, который представляет собой оператор try, объявляющий один или несколько ресурсов. Ресурс-это объект, который должен быть закрыт после завершения работы с ним программы. Инструкция try with resource гарантирует, что каждый ресурс будет закрыт в конце инструкции. Давайте посмотрим, как выполнить рефакторинг вышеуказанной программы для использования java try с ресурсами.
package com.journaldev.examples;
import java.io.File;
import java.io.FileOutputStream;
/**
* Java write file using FileOutputStream and try with resource
*
* @author pankaj
*
*/
public class FileOutputStreamWriteTrywithResource {
public static void main(String[] args) {
File file = new File("D:/data/file.txt");
String data = "Hello World.";
try (FileOutputStream fileOutputStream = new FileOutputStream(file)){
//create file if not exists
if (!file.exists()) {
file.createNewFile();
}
//fetch bytes from data
byte[] bs = data.getBytes();
fileOutputStream.write(bs);
fileOutputStream.flush();
fileOutputStream.close();
System.out.println("File written successfully.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Также проверьте запись java в файл и добавление java в файл для получения более подробной информации.
6. Пример потока вывода файлов Java
Давайте рассмотрим некоторые методы FileOutputStream на примере некоторых программ.
6.1) доработать()
Метод FileOutputStream finalize() очищает соединение с файлом и гарантирует, что метод close() этого выходного потока файла вызывается, когда на него больше нет ссылок.
Если мы попытаемся получить доступ к потоку вывода файлов после вызова finalize(), мы получим исключение.
package com.journaldev.examples;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
/**
* Java FileOutputStream finalize method example
*
* @author pankaj
*
*/
public class FileOutputStreamFinalizeExample extends FileOutputStream{
public FileOutputStreamFinalizeExample(File file) throws FileNotFoundException {
super(file);
}
public static void main(String[] args) {
File file = null;
try {
file = new File("D:/data/file.txt");
FileOutputStreamFinalizeExample fileOutputStream = new FileOutputStreamFinalizeExample(file);
//create file if not exists
if (!file.exists()) {
file.createNewFile();
}
//closing fileOutputStream
fileOutputStream.finalize();
//try to write data
fileOutputStream.write(123);
fileOutputStream.flush();
fileOutputStream.close();
System.out.println("File written successfully.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Выходные данные вышеупомянутой программы приведены ниже:
java.io.IOException: Stream Closed at java.io.FileOutputStream.write(Native Method) at java.io.FileOutputStream.write(Unknown Source) at com.journaldev.examples.FileOutputStreamFinalizeExample.main(FileOutputStreamFinalizeExample.java:31)
6.2) getFD()
Метод FileOutputStream getFD() возвращает объект FileDescriptor, представляющий соединение с фактическим файлом в файловой системе, используемой этим объектом FileOutputStream.
package com.journaldev.examples;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
/**
* Java FileOutputStream FileDescriptor Example
*
* @author pankaj
*
*/
public class FileOutputStreamFileDescriptorExample {
public static void main(String[] args) {
File file = new File("D:/data/file.txt");
FileDescriptor fileDescriptor = null;
try (FileOutputStream fileOutputStream = new FileOutputStream(file)){
//create file if not exists
if (!file.exists()) {
file.createNewFile();
}
fileDescriptor = fileOutputStream.getFD();
boolean valid = fileDescriptor.valid();
System.out.println("Valid file: "+valid);
} catch (Exception e) {
e.printStackTrace();
}
}
}
6.3) запись(байт[] b, int off, int len)
Этот метод записывает len байты из указанного массива байтов, начиная со смещения, в этот поток вывода файла.
package com.journaldev.examples;
import java.io.File;
import java.io.FileOutputStream;
/**
* Java write file using FileOutputStream with write(byte[] b, int off, int len) method
*
* @author pankaj
*
*/
public class FileOutputStreamWriteExample {
public static void main(String[] args) {
File file = null;
FileOutputStream fileOutputStream = null;
String data = "Hello World.";
try {
file = new File("D:/data/file.txt");
fileOutputStream = new FileOutputStream(file);
//create file if not exists
if (!file.exists()) {
file.createNewFile();
}
//fetch bytes from data
byte[] bs = data.getBytes();
fileOutputStream.write(bs, 0, 5);//only Hello will be written to a file
fileOutputStream.flush();
fileOutputStream.close();
System.out.println("File written successfully.");
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (fileOutputStream != null) {
fileOutputStream.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
Это все для потока вывода файлов Java, я надеюсь, что здесь не было пропущено ничего важного.
Ссылка: API Doc