자바 FileWriter
- 자바 FileWriter 클래스는
java.io
패키지의 일부입니다. - FileWriter는
java.io.OutputStreamWriter
클래스의 하위 클래스입니다. - FileWriter는 문자 스트림을 작성하는 데 사용됩니다.
- FileWriter는 문자 파일에 쓰기 위해 사용됩니다. 그의
write()
메서드는 문자 또는 문자열을 파일에 쓸 수 있습니다. - FileWriter는 일반적으로 더 높은 수준의 Writer 개체에 의해 래핑됩니다. 예를 들어, BufferedWriter 또는
PrintWriter
는 더 나은 성능과 더 유연한 방법을 제공하여 데이터를 작성합니다.
FileWriter 생성자
FileWriter(File file)
: 지정된 File 개체를 사용하여FileWriter
개체를 생성합니다. 파일이 디렉토리가 아닌 보통 파일인 경우나 파일이 존재하지 않지만 생성할 수 없거나 다른 이유로 열 수 없는 경우IOException
을 throw합니다.FileWriter(File file, boolean append)
: 지정된 File 객체를 사용하여 FileWriter 객체를 생성합니다. 두 번째 인수가 true이면 바이트가 파일의 시작이 아니라 끝에 쓰여집니다. 파일이 디렉토리가 아니거나 존재하지 않지만 만들 수 없거나 다른 이유로 열 수 없는 경우 IOException을 throw합니다.FileWriter(FileDescriptor fd)
: 지정된 파일 디스크립터와 연관된 FileWriter 객체를 생성합니다.FileWriter(String fileName)
: 지정된 fileName을 사용하여 FileWriter 객체를 생성합니다. 이름이 지정된 파일이 디렉토리가 아니거나 존재하지 않지만 만들 수 없거나 다른 이유로 열 수 없는 경우IOException
을 throw합니다.FileWriter(String fileName, boolean append)
: 두 번째 인수가 true이면 데이터가 파일의 시작이 아니라 끝에 쓰여집니다. 이름이 지정된 파일이 디렉토리가 아니거나 존재하지 않지만 만들 수 없거나 다른 이유로 열 수 없는 경우 append할지 여부를 나타내는 부울과 함께 지정된 fileName을 사용하여 FileWriter 객체를 생성합니다.
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
인터페이스를 구현하므로 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