자바 FileWriter 예제

자바 FileWriter

  • 자바 FileWriter 클래스는 java.io 패키지의 일부입니다.
  • FileWriter는 java.io.OutputStreamWriter 클래스의 하위 클래스입니다.
  • FileWriter는 문자 스트림을 작성하는 데 사용됩니다.
  • FileWriter는 문자 파일에 쓰기 위해 사용됩니다. 그의 write() 메서드는 문자 또는 문자열을 파일에 쓸 수 있습니다.
  • FileWriter는 일반적으로 더 높은 수준의 Writer 개체에 의해 래핑됩니다. 예를 들어, BufferedWriter 또는 PrintWriter는 더 나은 성능과 더 유연한 방법을 제공하여 데이터를 작성합니다.

FileWriter 생성자

  1. FileWriter(File file): 지정된 File 개체를 사용하여 FileWriter 개체를 생성합니다. 파일이 디렉토리가 아닌 보통 파일인 경우나 파일이 존재하지 않지만 생성할 수 없거나 다른 이유로 열 수 없는 경우 IOException을 throw합니다.
  2. FileWriter(File file, boolean append): 지정된 File 객체를 사용하여 FileWriter 객체를 생성합니다. 두 번째 인수가 true이면 바이트가 파일의 시작이 아니라 끝에 쓰여집니다. 파일이 디렉토리가 아니거나 존재하지 않지만 만들 수 없거나 다른 이유로 열 수 없는 경우 IOException을 throw합니다.
  3. FileWriter(FileDescriptor fd): 지정된 파일 디스크립터와 연관된 FileWriter 객체를 생성합니다.
  4. FileWriter(String fileName): 지정된 fileName을 사용하여 FileWriter 객체를 생성합니다. 이름이 지정된 파일이 디렉토리가 아니거나 존재하지 않지만 만들 수 없거나 다른 이유로 열 수 없는 경우 IOException을 throw합니다.
  5. FileWriter(String fileName, boolean append): 두 번째 인수가 true이면 데이터가 파일의 시작이 아니라 끝에 쓰여집니다. 이름이 지정된 파일이 디렉토리가 아니거나 존재하지 않지만 만들 수 없거나 다른 이유로 열 수 없는 경우 append할지 여부를 나타내는 부울과 함께 지정된 fileName을 사용하여 FileWriter 객체를 생성합니다.

Java FileWriter 예제

FileWriter는 java.io.OutputStreamWriterjava.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 인터페이스를 구현하므로 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)는 65가 문자 A에 대한 10진 값이기 때문에 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();
		}
	}
}

(char[] cbuf, int off, int len)를 작성합니다

이 메서드는 int off부터 int len까지의 일부 문자 배열을 char[] cbuf로 지정합니다.

  • 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();
		}
	}
}

(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();
		}
	}
}

(String 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)

이 메서드는 지정된 문자를 추가합니다. 여기서 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이 throw됩니다. 이전에 닫힌 스트림을 다시 닫는 것은 효과가 없습니다.

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 대 FileOutputStream

  • FileWriter는 문자 스트림을 작성하는 데 사용되며, FileOutputStream은 원시 바이트 스트림을 작성하는 데 사용됩니다.
  • FileWriter는 16비트 문자를 처리하고, FileOutputStream는 8비트 바이트를 처리합니다.
  • FileWriter는 유니코드 문자열을 처리할 수 있지만, FileOutputStream는 파일에 바이트를 쓰고 문자나 문자열을 수락하지 않으므로 문자열을 수락하려면 OutputStreamWriter로 래핑해야 합니다.

또한 자바에서 파일을 쓰는 방법에 대한 자세한 내용은 java write file을(를) 확인하십시오. 이것으로 자바 FileWriter에 관한 모든 중요한 내용을 다루었기를 바랍니다.

모든 예제 코드는 저희 GitHub 저장소에서 다운로드할 수 있습니다.

참고 문헌: API 문서

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