알버트의 개발하는 블로그
자바 제13강 : 자바 PrintWriter 클래스로 파일 입출력 하기와 경로 지정 방식(절대, 상대) 본문
이번 시간에는 자바에서 제공하는 PrintWriter 클래스에 대해서 배워 보겠습니다.
PrintWriter 클래스는 파일을 만들어 내용을 입력하고 파일내용을 출력해주는 중요한 클래스입니다.
그래서, 쓰기 위해서는 파일의 경로도 설정해줘야 하고 내용도 입력해주어야 합니다.
PrintWriter 클래스 Write 예제
import java.io.FileNotFoundException;
import java.io.PrintWriter; //PrintWriter 패키지 포함
import java.util.Scanner;
public class printWriter {
public static void main(String[] args) {
Scanner sc = null; //스캐너 클래스 sc객체 선언
PrintWriter printWriter = null; //printWriter 선언
try { //예외 처리 구문
//현재 프로젝트의 src폴더에 out.txt파일을 만든다.
String filename = "./src/out.txt";
// PrintWriter 클래스의 객체를 생성해서 출력으로 사용할 파일을 open한다.
printWriter = new PrintWriter(filename);
sc = new Scanner(System.in);
// 시스템에서 입력하는 값을 sc에 넣는다.
// QUIT가 입력될때까지 반복되며 키보드로 입력받은 데이터를 텍스트 파일로 출력한다.
while(true) {
System.out.print(">>> ");
String str= sc.nextLine().trim();//trim()은 불필요한 앞뒤 공백을 지운다
if (str.length() != 0) //trim()처리했으므로 str에는 불필요한 값이 없다.
{
// 입력받은 데이터가 "QUIT"면 무한 루프 탈출시킨다.
if (str.toUpperCase().equals("QUIT")) {
break;
}
// write() 메소드를 사용해 printwriter 객체로 생성한 파일에 데이터를 출력한다.
printWriter.write(str + "\r\n");
// \r : carriage return, 커서를 줄의 맨 앞으로 보낸다.
// \n : new Line, 줄을 바꾼다. \r\n 처리를 하면 한줄 엔터와 똑같다.
}
}
System.out.println("저장완료! ");
} catch (FileNotFoundException e) {
System.out.println("디스크에 파일이 존재하지 않습니다.");
e.printStackTrace();
} finally {
// 출력 용도로 사용하는 파일은 작업이 완료되면 close로 닫아줘야 파일에 저장이 된다.
if (printWriter != null) {
printWriter.close();
}
}
}
}
먼저 PrintWriter 클래스로 파일을 만들고 내용을 입력하는 예제입니다. filename이란 이름의 문자열을 만들어서 그 안에 저장할 파일의 경로를 입력했습니다.
경로 지정 방식에는 절대 경로 방식과 상대 경로 방식이 있습니다.
절대 경로 : 디스크(최상위) 폴더(디렉토리)부터 파일이 위치한 폴더까지의 경로를 의미한다. 상대 경로 : "."으로 시작하고 "."은 파일이 위치한 폴더까지의 경로를 의미한다.
절대 경로는 파일이 위치한 디스크부터 파일이 위치한 폴더까지의 경로를 의미하며 상대 경로는 파일의 위치를 상대적으로 표현합니다. 상대 경로 방식이 더 간략하게 쓸수있어서 더 많이 쓰입니다.
String filename = "D:\\한용규\\JAVA\\workspace\\0329\\src\\out.txt"; //절대 경로
String filename = "./src/out.txt"; //상대 경로
상대 경로는 지금 파일이 위치한 프로젝트 폴더까지의 경로를 "."으로 생략할 수 있습니다. 그래서 위의 코딩처럼 저렇게 짧게 코딩해줄 수 있습니다.
한번 실행해보겠습니다.
콘솔창이 실행되어 QUIT를 입력하기 전까지 값을 입력받고 그 값을 out.txt 파일에 저장합니다.
out.txt파일이 없다면 out.txt파일을 컴파일러가 자동으로 만들고 값을 저장합니다.
파일을 열어서 비교해보겠습니다.
src 폴더에서 out.txt가 생성되고 입력한 값이 잘 저장되었음을 알 수 있습니다.
PrintWriter 클래스 Read 예제
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class printWriter {
public static void main(String[] args) {
Scanner sc = null; //텍스트 파일의 데이터를 읽어오는 scanner
try {
// 입력 파일의 경로와 이름 설정한다.
String filename = "./src/out.txt"; //상대 경로
// 파일의 이름과 경로명을 이용해서 생성한 파일 클래스의 객체를 스캐너 생성자의 인수로 전달한다.
sc = new Scanner(new File(filename));
// hasNextLine() :다음에 읽어들일 줄이 있으면 true 아니면 false를 리턴
while(sc.hasNextLine()) { //파일에서 다음에 읽어들일 줄이 있는가?있으면 반복
String str = sc.nextLine().trim();
if (str.length() != 0) {
Scanner scan = new Scanner(str); //문자열 변수의 내용을 읽어들이는 스캐너
// hasNext() : 다음에 읽어들일 데이터가 있으면 true, 없으면 false를 리턴한다.
String s = "";
while(scan.hasNext()) { //문자열 변수에서 다음에 읽어들일 데이터가 있는가?
s += scan.next(); //데이터가 있으면 문자열 s에 추가
}
System.out.println(s); //문자열 s 출력
}
}
}
catch (FileNotFoundException e) { //예외 처리 구문
System.out.println("디스크에 파일이 존재하지 않습니다.");
}
}
}
이와 같이 코딩을 해주시면 방금 입력하고 저장되었던 파일을 불러와서 데이터를 출력할 수 있습니다.
out.txt의 경로를 불러주고, scanner를 통해서 파일의 데이터를 뽑아오는 것을 볼 수 있습니다.
스캐너로부터 뽑은 값을 String s에 추가해서 s를 출력했습니다. 실행해보겠습니다.
이렇게 우리가 입력하고 저장했던 값들이 정상적으로 출력되는 것을 알 수 있습니다.
이처럼 PrintWriter클래스는 파일 입출력과 관련해서 정말 중요한 클래스이고 유용한 클래스입니다.
능숙한 프로그래밍을 위해서 꼭 알아야 겠습니다. 읽어주셔서 감사합니다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
자바 제15강 : 상속 (Inheritance)과 함수 재정의(override, 메소드 오버라이드) (0) | 2021.09.10 |
---|---|
자바 제14강 : 자바 StringTokenizer 클래스로 데이터 나누기 (0) | 2021.09.10 |
자바 제12강 : 자바 랜덤 난수 (Random) 이용해서 로또 번호 뽑기 (0) | 2021.09.10 |
자바 제11강 : ArrayList와 클래스 이용하여 학생들의 정보 출력하기 (0) | 2021.09.10 |
자바 제10강 : 자바 예외 처리 구문 (try~catch, finally) 사용하기 (0) | 2021.09.10 |