1. 파일 처리
: 읽기, 쓰기, 편집 등 파일에 대한 다양한 기능을 수행하는 것
이때 필요한 모든 메서드는 java.io 패키지에 있으므로 파일 처리를 위해 프로그램 시작 전 다음 패키지 포함
import java.io.*;
: 자바 입출력(I/O) 수행하는 데 필요한 거의 모든 클래스 포함
stream: 두 대상을 연결하고 데이터를 전송할 수 있는 것
▷ 입출력 스트림
- 자바에서 모든 입출력이 스트림을 통해 이루어짐
- 단방향 통신만 가능하기에 입출력 동시에 처리 X
- 바이트 스트림
: 영상, 음성, 영문자 등의 바이너리 데이터를 처리, 1바이트 단위의 입출력을 처리
- 한 번에 8비트 데이터를 처리하고 8비트당 입출력 연산을 수행
- 가장 일반적으로 사용되는 입력 스트림 클래스는 FileInputStream, 출력 스트림 클래스는 FileOutputStream
- 문자 스트림
: 다국어를 표현하는 유니코드를 처리, 2바이트 단위의 문자 입출력을 처리
- 한 번에 16비트 유니코드 데이터의 입출력을 처리 (바이트 스트림보다 2배로 빠른 수행 ok )
- 일반적으로 문자 스트림은 바이트 스트림 클래스를 사용하여 구현
- 가장 일반적으로 사용되는 입력 스트림 클래스는 FileReader, 출력 스트림 클래스는 FileWriter
▷ 파일 처리 과정
- File 클래스로 파일 열기(생성하기)
- 입출력 스트림 클래스로 파일 읽기 / 쓰기
- 파일 읽기 / 쓰기 종료하기(닫기)
2. 파일 생성
File 파일객체명 = new File("[디렉터리명\]");
File file = new File("test.txt");
File 클래스의 생성자 >
생성자 | 설명 |
File(File parent, String child) | 부모 추상 경로명과 자식 문자열 경로명에서 파일 인스턴스를 만듦 |
File(String pathname) | 주어진 경로명을 추상 경로명으로 변환하고 새 파일 인스턴스를 만듦 |
File(String parent, String child) | 부모 경로명과 자식 경로명을 가져와서 파일 인스턴스를 만듦 |
File(URI uri) | 주어진 URI를 추상 경로명으로 변환하여 파일 인스턴스를 만듦 |
createNewFile() 메서드를 사용해서 파일 생성
지정된 위치에 파일이 존재하면 false, 파일이 존재하지 않으면 true 를 반환
File file = new File("text.txt");
try {
boolean b = file.createNewFile();
...
} catch(IOException e) {
...
}
File 클래스의 주요 메서드 >
메서드 | 설명 |
Boolean canRead() | 파일을 읽을 수 있는지 확인 |
Boolean createNewFile() | 원하는 경로에 새 파일을 생성. 보통 생성된 파일이 비어 있음 |
Boolean canWrite() | 파일에 쓸 수 있는지, 즉 읽기 전용 파일인지 아닌지 확인 |
Boolean exists() | 요청한 파일이 디렉터리에 있는지 확인 |
Boolean delete() | 디렉터리 파일을 삭제 |
String getName() | 디렉터리에서 특정 파일명을 찾음 |
String getAbsolutePath() | 주어진 파일의 절대 경로를 반환 |
Long length() | 파일 크기를 바이트 단위로 반환 |
String[] list() | 현재 작업 디렉터리에 있는 모든 파일을 반환 |
Boolean mkdir() | 새 디렉터리를 생성 |
File 클래스를 이용한 파일 생성 예시 )
import java.io.File;
import java.io.IOException;
public class Example01 {
public static void main(String[] args) {
File fileObj = new File("example01.txt");
try {
boolean success = fileObj.createNewFile();
if(success) {
System.out.println("파일 생성 성공");
} else {
System.out.println("파일 생성 실패");
}
} catch(IOException e) {
System.out.println(e);
}
}
}
실행 결과 )
파일 생성 성공 |
앞 Example01.java 파일의 이름과 경로, 쓰기/읽기 여부, 파일 크기 등의 정보를 얻어와 출력해보기
import java.io.File;
public class FileHandling01 {
public static void main(String[] args) {
File finfo = new File("src\\Example01.java");
if (finfo.exists()) {
System.out.println("파일의 이름: " + finfo.getName());
System.out.println("파일의 경로: " + finfo.getAbsolutePath());
System.out.println("파일 쓰기가 가능한가?: " + finfo.canWrite());
System.out.println("파일 읽기가 가능한가?: " + finfo.canRead());
System.out.pritnln("파일의 크기: " + finfo.length());
} else {
System.out.println("존재하는 파일이 아닙니다.");
}
}
}
실행결과 )
파일의 이름: Example01.java 파일의 경로: C:\users\user\Java\Chap12\src\Example01.java 파일 쓰기가 가능한가?: true 파일 읽기가 가능한가?: true 파일의 크기: 545 |
3. 파일 쓰기
- 바이트 출력 스트림 유형
OutputStream 클래스
- 출력(데이트 쓰기)을 하는 추상 클래스
- 바이트 출력 스트림을 나타내는 모든 크래스의 슈퍼 클래스
FileOutputStream 클래스
- 파일에 데이터를 쓰는 데 사용되는 출력 스트림
- 파일에 기본값을 쓰는 경우에 사용
- 바이트 지향 데이터와 문자 지향 데이터를 모두 작성 가능
FileOutputStream 클래스를 이용한 파일 쓰기 예시 )
import java.io.File;
import java.io.FileOutputStream;
public class Example02 {
public static void main(String[] args) {
String str = "Hello! Java Programming ";
try {
File file = new File("example02.txt");
if (!file.exists())
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
byte[] b = str.getBytes();
fos.write(b);
fos.close();
System.out.pritnln("파일 쓰기 성공"_;
} catch(Exception e) {
e.getMessage();
}
}
}
실행 결과 )
![]() |
- 문자 출력 스트림 유형
Writer 클래스
- 문자 스트림에 쓰기 위한 추상 클래스
- 서브 클래스가 구현해야 하는 추상 메서드: write(), flush(), close()
FileWriter 클래스
- 문자 데이터를 파일에 쓰는 데 사용
- FileOutputStream 클래스와 달리 문자열을 직접 쓰는 방법을 제공 -> 문자열을 바이트 배열로 변환할 필요 X
FileWriter 클래스를 이용하여 키보드를 통해 ID와 이름을 입력받아 저장보기 >
import java.io.File;
import java.io.FileWriter;
import java.util.Scanner;
public class FileHandling03 {
public static void main(String[] args) {
File file = new File("member.txt");
try {
if (!file.exists())
file.createNewFile();
FileWriter fw = new FileWriter(file);
Scanner input = new Scanner(System.in);
boolean quit = false;
while (!quit) {
System.out.print("아이디 : ");
String userID = input.next();
fw.write("아이디 : " + userID + " ");
System.out.print("이름: ");
String userName = input.next();
fw.write("아이디 : " + userName + " ");
System.out.print("계속 진행? Y | N ");
input = new Scanner(System.in);
String str = input.Line();
if (str.toUpperCase().equals("N"))
quit = true;
} catch(Exception e) {
e.getMessage();
}
}
}
실행 결과 )
![]() |
4. 파일 읽기
- 바이트 입력 스트림 유형
- InputStream 클래스는 입력(데이터 읽기)을 가져오는 데 사용하는 추상 클래스
- 바이트 입력 스트림을 나타내는 모든 클래스의 슈퍼 클래스
FileInputStream 클래스
- 파일에서 이미지 데이터, 오디오, 동영상 등의 바이트 지향 데이터를 읽어오는 데 사용되는 입력 스트림
FileInputStream 클래스를 이용해서 구구단을 읽어와 출력해보기 >
import java.io.File;
import java.io.FileInputStream;
public class FileHandling04 {
public static void main(String[] args) {
File file = new File("gugudan.txt");
try {
if (!file.exists())
file.createNewFile();
FileInputStream fis = new FileInputStream(file);
int i = 0;
while ((i = fis.read() != -1) {
System.out.print((char) i);
}
fis.close();
System.out.println("파일 읽기 성공");
} catch(Exception e) {
System.out.println(e);
}
}
}
실행 결과 )
... 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81 파일 읽기 성공 |
- 문자 입력 스트림 유형
Reader 클래스
- 문자 스트림을 읽기 위한 추상 클래스
- 서브 클래스가 구현해야 하는 추상 메서드 : read(), close()
FileReader 클래스
- 파일에서 문자 지향 데이터를 읽는 데 사용
- FileInputStream 클래스와 같은 바이트 형식으로 데이터를 반환
BufferedReader 클래스
- 문자 기반 입력 스트림에서 텍스트를 읽는 데 사용
- readLine() 메서드로 데이터를 한 줄씩 읽을 떄 사용할 수 있어 성능으 빠르게 함
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class Example06 {
public static void main(String[] args) {
try {
File file = new File("example03.txt"); // File 클래스로 파일 열기(생성하기)
if (!file.exists())
file.createNewFile();
FileReader fis = new FileReader(file); // 입력 스트림 클래스로 파일 읽기
BufferedReader br = new BufferedReader(fis);
String str;
while ((str = br.readLine()) != null) {
System.out.println(str);
}
fis.close(); // 파일 읽기 종료하기(닫기)
System.out.println("파일 읽기 성공");
} catch(Exception e) {
System.out.println(e);
}
}
}
실행 결과)
Hello!! Java Programming 파일 읽기 성공 |
'Study > Java Study' 카테고리의 다른 글
JAVA 프로그래밍 및 실습 [기말 정리 요약본] (0) | 2023.12.05 |
---|---|
JAVA 프로그래밍 및 실습 [중간 정리 요약본] (0) | 2023.10.21 |
11장. 예외 처리 (0) | 2023.05.28 |
10장. 패키지 (0) | 2023.05.28 |
9장. 추상 클래스와 인터페이스 (0) | 2023.05.22 |