파일을 이용한 입출력 방법에 대해 알아보자.
[순서]
1. 파일 쓰기
1. FileOutputStream
2. FileWriter
3. PrintWriter
4. 파일에 내용 추가하기
2. 파일 읽기
다음 예제를 작성해 보자.
import java.io.FileOutputStream;
import java.io.IOEXception;
public class Sample{
public static void main(String[] args) throws IOException{
FileOutputStream output = new FileOutputStream('./out.txt');
output.close();
}
}
위 예제를 실행하면 현재 디렉터리 하위에 새로운 파일output.txt
이 하나 생성된다
이번에는 생성하는 파일에 내용을 적어보자.
import java.util.FileOutputStream;
import java.io.IOException;
public class Sample{
public static void main(String[] args) throws IOException{
FileOutputStream output = new FileOutputStream("./out.txt");
for(int i=1; i<11; i++){
String data=i+" 번째 줄 작성중.\r\n";
output.write(date.getBytes()); //**작성
}
output.close();
}
}
*\r - 개행문자(커서 위치를 현재 줄의 맨 앞으로 이동)
*\n - 커서를 다음 줄로 이동
* 유닉스의 경우 \n만 있으면 된다.
OutputStream 역시 바이트 단위로 데이터를 처리하는 클래스이다. FileOutputStream은 OutputStream 클래스를 상속받아 만든 클래스이며, 바이트 단위로 데이터를 처리하게 되어 있다.
FileOutputStream에 값 입력시 byte배열로 입력해야 하므로 String을 byte 배열로 변경하는 getByte()
메서드 사용.
문자열을 파일로 작성시 String을 byte로 변환해야 하므로 불편함이 생긴다. 이를 해결하기 위한 예제를 보도록하자.
import java.io.FileWriter;
import java.io.IOException;
public class Sample{
public static void main(String[] args) throws IOException{
FileWriter fw = new FileWriter("./out.txt");
for(int i=1; i<11; i++){
String data = i+" 번째 줄입니다.\r\n";
fw.write(data);
}
fw.close();
}
}
FileOutputStream은 입력에 byte 배열 입력
FileWrtier를 이용하면 byte배열 대신 문자열 사용 가능
대신 FileWriter는 \r\n
개행문자 입력 필요
import java.io.Printwriter;
imoprt jaba.io.IOException;
public class Sample{
public static void main(String[] args) throws IOException{
PrintWriter pw = new PrintWriter(./"txt.out"); // 변경
for (int i=1; i<11; i++){
String data = i+" 번째 줄 작성중\r\n";
pw.write(data); // 변경-
}
pw.close();
}
}
PrintWriter는 개행문자 불필요
System.out
대신 println
메서드 사용
추가 모드
1.FileWriter
(...)
}
fw.close();
FileWriter fw2 = new FileWriter("./out.txt",true); // true-파일을 추가모드로 연다
for(int i=11; i<21; i++){
String data=i+" 번째 줄 작성중.\r\n";
fw2.write(data);
}
fw2.close();
}
}
true
)를 추가로 전달해 파일을 추가모드(append)로 재작성.2.PrintWriter
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
(...)
pw.close();
PrintWriter pw2 = new PrintWriter(new FileWriter()
for(int i=11; i<21; i++){
String data = i+" 번째 줄 작성";
pw2.pritnln(data);
}
pw2.close();
}
}
파일을 읽는 방법은 두 가지가 있다.
FileInputStream을 사용해 byte 배열을 이용해 파일을 읽는 것과 BufferedReader를 통해 라인단위로 읽는 방법이다.FileInputStream을 통해 파일을 읽을때는 정확한 길이를 알아야 한다는 단점이 있다.
FileInputStream(byte 단위 읽기)
import java.io.FileInputStream;
import java.io.IOException;
public class Sample{
public static void main(String[] args) throws IOExcetpion{
byte[] b = new byte[1024];
FileInputStream input = new FileInputStream("./out.txt")'
input.read(b); // 텍스트 읽기
System.out.println(new String(b)); // byte 배열을 문자열로 변경해 출력 (바이트->문자열 변경)
input.close();
}
}
new String(바이트배열)
처럼 변경해 사용BufferedReader(라인 단위 읽기)
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Sample{
public static void main(String[] args) thrwos IOException{
BufferedReader br = new BufferedReader(new FileReader("./out.txt");
while(true){
String line = br.readline();
if(line==null) break; // 더 읽을 라인이 없는 경우 while문 정지
System.out.println(line);
}
br.close();
}
}
간단 정리
FileOutputStream - 바이트 단위로 받아온다.
getByte()
메서드 사용FileWriter - byte배열 대신 문자열 사용 가능
\r\n
의 개행문자를 덧붙여야 한다.PrintWriter - 문자열 사용 가능
\r\n
대신 println
메서드 사용 가능 파일에 내용 추가하기
FileWriter 새로운객체 = new FileWriter("원본파일경로",true) // true - 파일 추가 모드
파일 읽기