Пример Java FileWriter

Java FileWriter

  • Класс FileWriter в Java является частью пакета java.io.
  • FileWriter является подклассом класса java.io.OutputStreamWriter.
  • FileWriter предназначен для записи потоков символов.
  • FileWriter используется для записи в символьные файлы. Его методы write() позволяют записывать символ(ы) или строки в файл.
  • Обычно объекты FileWriter оборачиваются более высокоуровневыми объектами Writer, такими как BufferedWriter или PrintWriter, которые обеспечивают лучшую производительность и более гибкие методы записи данных.

Конструкторы FileWriter

  1. FileWriter(File file): Создает объект FileWriter, используя указанный объект File. Выбрасывает IOException, если файл существует, но является каталогом, а не обычным файлом, или не существует, но не может быть создан, или не может быть открыт по какой-либо другой причине.
  2. FileWriter(File file, boolean append): Создает объект FileWriter, используя указанный объект File. Если второй аргумент установлен в true, то байты будут записаны в конец файла, а не в начало. Возбуждает исключение IOException, если файл существует, но является каталогом, а не обычным файлом, или не существует, но не может быть создан, или не может быть открыт по какой-либо другой причине.
  3. FileWriter(FileDescriptor fd): Создает объект FileWriter, связанный с указанным файловым дескриптором.
  4. FileWriter(String fileName): Создает объект FileWriter с использованием указанного имени файла. Возбуждает исключение IOException, если именованный файл существует, но является каталогом, а не обычным файлом, или не существует, но не может быть создан, или не может быть открыт по какой-либо другой причине.
  5. FileWriter(String fileName, boolean append): Создает объект FileWriter с использованием указанного имени файла и логического значения, указывающего, следует ли добавлять данные. Если второй аргумент установлен в true, то данные будут записаны в конец файла, а не в начало. Возбуждает исключение IOException, если именованный файл существует, но является каталогом, а не обычным файлом, или не существует, но не может быть создан, или не может быть открыт по какой-либо другой причине.

Пример Java FileWriter

FileWriter наследует методы классов java.io.OutputStreamWriter и java.io.Writer. Давайте рассмотрим нижеуказанные методы с примерами.

write(int c)

Этот метод записывает один символ, указанный параметром int c.

package com.journaldev.io.filewriter;

import java.io.FileWriter;
import java.io.IOException;

/**
 * Java write file using FileWriter write method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteIntExample {

	public static void main(String[] args) {
		FileWriter fileWriter = null;
		try {
			fileWriter = new FileWriter("D:/data/file.txt");
			// унаследованный метод из java.io.OutputStreamWriter 
			fileWriter.write(65);
			fileWriter.write(66);
			fileWriter.write(67);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if (fileWriter != null) {
					fileWriter.flush();
					fileWriter.close();					
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

FileWriter реализует интерфейс AutoCloseable, поэтому мы можем использовать try с ресурсами при использовании класса FileWriter.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write method using try with resource
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteIntTryWithResource {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			// унаследованный метод из java.io.OutputStreamWriter 
			fileWriter.write(65);
			fileWriter.write(66);
			fileWriter.write(67);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Примечание: В приведенной выше программе fileWriter.write(65) запишет A в файл, потому что 65 – это десятичное значение символа A, следовательно, целое число 65 будет преобразовано в символ A, и то же самое с другими.

write(String str, int off, int len)

Этот метод записывает часть строки str с позиции int off по позицию int len.

  • str: Строка, которую нужно записать
  • off: Смещение, с которого начать чтение символов
  • len: Количество символов, которые будут записаны

Если значение параметра len отрицательно, то символы не записываются.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(String  s,  int  off,  int  len) method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteStringExample {

	public static void main(String[] args) {
		String data = "This is FileWriter Example.";
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			// унаследованный метод от java.io.OutputStreamWriter 
			fileWriter.write(data, 8, 10);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

write(char[] cbuf, int off, int len)

Этот метод записывает часть массива символов, указанную char[] cbuf с int off по int len.

  • cbuf: Массив символов
  • off: Смещение, с которого начинается чтение символов
  • len : Количество символов для записи
package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(char[] cbuf,  int  off,  int  len) method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteCharArray {

	public static void main(String[] args) {
		char[] data = "This is FileWriter Example.".toCharArray();
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			// унаследованный метод от java.io.OutputStreamWriter 
			fileWriter.write(data, 8, 10);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

write(char[] cbuf)

Этот метод записывает массив символов, указанный cbuf.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(char[] cbuf) method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteCharArrayExample {

	public static void main(String[] args) {
		char[] data = "This is FileWriter Example.".toCharArray();
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			// унаследованный метод от java.io.Writer 
			fileWriter.write(data);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

write(String str)

Этот метод записывает строковое значение в файл, указанный str.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(String  str) method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteString {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			// унаследованный метод от java.io.Writer 
			fileWriter.write("JournalDev");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

append(char c)

Этот метод добавляет указанный символ к этому writer, где c – это 16-битный символ для добавления.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter append(char c) method
 * 
 * @author pankaj
 *
 */
public class FileWriterAppendCharacter {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			// унаследованный метод от java.io.Writer 
			fileWriter.write("JournalDev");
			fileWriter.append('C');
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

flush()

Этот метод сбрасывает поток. Когда вызывается метод flush(), данные немедленно записываются в выходной файл.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file with FileWriter flush() method
 * 
 * @author pankaj
 *
 */
public class FileWriterFlushExample {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			// унаследованный метод от java.io.Writer 
			fileWriter.write("JournalDev");
			// унаследованный метод от java.io.OutputStreamWriter
			fileWriter.flush();
			
			fileWriter.write(" Tutorials");
			fileWriter.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

close()

Этот метод сбрасывает поток перед его закрытием. После закрытия потока вызов методов write() или flush() вызовет исключение IOException. Закрытие ранее закрытого потока не оказывает никакого воздействия.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file with FileWriter close() method
 * 
 * @author pankaj
 *
 */
public class FileWriterCloseExample {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			// унаследованный метод от java.io.Writer 
			fileWriter.write("JournalDev");
			// унаследованный метод от java.io.OutputStreamWriter
			fileWriter.close();;
			
			fileWriter.write(" Tutorials");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Вывод:

java.io.IOException: Stream closed
	at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
	at sun.nio.cs.StreamEncoder.write(Unknown Source)
	at sun.nio.cs.StreamEncoder.write(Unknown Source)
	at java.io.OutputStreamWriter.write(Unknown Source)
	at java.io.Writer.write(Unknown Source)
	at com.journaldev.examples.FileWriterCloseExample.main(FileWriterCloseExample.java:20)

FileWriter vs FileOutputStream

  • FileWriter предназначен для записи потоков символов, в то время как FileOutputStream используется для записи потоков сырых байтов.
  • FileWriter работает с 16-битными символами, в то время как FileOutputStream работает с 8-битными байтами.
  • FileWriter может обрабатывать строки Unicode, в то время как FileOutputStream записывает байты в файл и не принимает символы или строки, поэтому для этого требуется обертка OutputStreamWriter для принятия строк.

Также смотрите java write file для получения дополнительной информации о том, как записать файл в Java. Это все, что касается Java FileWriter, я надеюсь, что здесь ничего важного не упущено.

Вы можете загрузить все примеры кода из нашего GitHub Repository.

Ссылка: API Doc

Source:
https://www.digitalocean.com/community/tutorials/java-filewriter-example