Рубрики
Без рубрики

Поток вывода файлов Java

Поток вывода файлов Java, поток вывода файлов в Java, запись java в файл, пример потока вывода файлов, конструкторы потока вывода файлов, методы потока вывода файлов, добавление потока вывода файлов Java, поток вывода файлов Java, создание кода примера файла, пример потока вывода файлов Android

Автор оригинала: Pankaj Kumar.

Класс Java FileOutputStream является частью java.io посылка. Сегодня мы подробно рассмотрим конструкторы и методы класса FileOutputStream с примерами кодов.

1. Поток вывода файлов Java

  • FileOutputStream-это поток вывода для записи данных в файл или файловый дескриптор.
  • FileOutputStream используется для записи потоков необработанных байтов, таких как данные изображения. Его хорошо использовать с байтами данных, которые не могут быть представлены в виде текста, таких как PDF, документы Excel, файлы изображений и т.д.
  • Класс FileOutputStream является подклассом класса OutputStream .

2. Иерархия классов FileOutputStream

3. Конструкторы потока вывода файлов

FileOutputStream предоставляет методы для записи байтов в файл, и мы можем создать экземпляр FileOutputStream, используя приведенные ниже конструкторы.

  1. Поток вывода файлов(файловый файл) : Создает поток вывода файлов для записи в файл, представленный указанным файловым объектом. Если файл существует, но является каталогом, а не обычным файлом, не существует, но не может быть создан или не может быть открыт по какой-либо другой причине, то возникает исключение FileNotFoundException .
  2. Поток вывода файла(файл файла, логическое добавление) : Создает поток вывода файла для записи в файл, представленный указанным объектом файла. Если второй аргумент верен, то байты будут записываться в конец файла, а не в начало. Если файл существует, но является каталогом, а не обычным файлом, не существует, но не может быть создан или не может быть открыт по какой-либо другой причине, то создается исключение FileNotFoundException.
  3. Поток вывода файлов (FileDescriptor fdObj) : Создает поток вывода файлов для записи в указанный дескриптор файла, который представляет существующее соединение с фактическим файлом в файловой системе.
  4. Поток вывода файла (имя строки) : Создает поток вывода файла для записи в файл с указанным именем.
  5. Поток вывода файла (имя строки, логическое добавление) : Создает поток вывода файла для записи в файл с указанным именем. Если второй аргумент верен, то байты будут записываться в конец файла, а не в начало. Если файл существует, но является каталогом, а не обычным файлом, не существует, но не может быть создан или не может быть открыт по какой-либо другой причине, то возникает исключение FileNotFoundException .

4. Методы потока вывода файлов Java

Давайте взглянем на приведенные ниже методы класса FileOutputStream.

  1. close() : Этот метод закрывает поток вывода этого файла и освобождает все системные ресурсы, связанные с потоком.
  2. finalize() : Этот метод очищает соединение с файлом и гарантирует, что метод close() этого потока вывода файла вызывается, когда на него больше нет ссылок.
  3. getChannel() : Этот метод возвращает уникальный объект FileChannel, связанный с этим потоком вывода файла. Начальная позиция возвращаемого канала будет равна количеству байтов, записанных в файл, и запись байтов в этот поток увеличит позицию канала.
  4. getFD() : Этот метод возвращает объект FileDescriptor, представляющий соединение с фактическим файлом в файловой системе, используемой этим объектом FileOutputStream.
  5. запись(байт[] b) : Этот метод записывает байты b.длины из указанного массива байтов в этот поток вывода файла.
  6. запись(байт[] b, int off, int len) : Этот метод записывает байты len из указанного массива байтов, начиная со смещения off, в этот поток вывода файла.
  7. запись(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