파일 클래스
java.os 패키지는 파일 및 디렉토리 정보를 저장하는 File 클래스를 제공합니다.
객체 생성 방법
File file = new File("경로");
존재() 메소드
파일 또는 폴더가 존재하는지 확인할 수 있습니다.
File file = new File("경로");
Boolean isExist = file.exists();
길이() 메서드
파일의 크기(단위 바이트)를 반환합니다.
File file = new File("경로");
long fileSize = file.length(); //파일크기 리턴 메소드
System.out.println("파일크기 : " + fileSize); // byte
System.out.println("파일크기 : " + fileSize/1024 + "KB"); // KB
System.out.println("파일크기 : " + fileSize/1024/1024 + "MB"); // MB
삭제() 메서드
- 파일 삭제 방법
- 휴지통으로 이동하지 않고 바로 삭제됩니다.
File file = new File("경로");
Boolean isDelete = file.delete();
mkdir(), mkdirs() 메서드
- 메이크 디렉토리의 약자
- mkdir() → 마지막 경로(디렉토리 또는 파일)만 존재하지 않으면 그 이름으로 새로운 디렉토리가 생성되고, 중간 경로가 없으면 새로운 디렉토리가 생성되지 않는다.
- mkdirs() → 경로에 없는 모든 디렉토리 생성
디렉토리()
디렉토리인지 확인
File file = new File("경로");
Boolean isThisDirectory = file.isDirectory();
파일()
파일인지 확인
File file = new File("경로");
Boolean isThisFile = file.isFile();
입력/출력 스트림
Java는 입력 및 출력 스트림을 통해 데이터를 입력하고 출력합니다.
파일 끝(EOF)
데이터 원본에서 더 이상 데이터를 읽을 수 없음을 나타냅니다.
바이트 스트림
- 이미지, 멀티미디어, 텍스트 등 모든 종류의 데이터 입출력에 사용됩니다.
- 바이트 단위의 I/O(1바이트)
- 입력스트림, 출력스트림
FileInputStream
String fileName = "data.txt"; //절대경로 주지않으면 현재경로에서 찾음
FileInputStream fis = null; //try-catch문 사용으로 인해 외부에 선언해야함
try {
fis = new FileInputStream(fileName); //파일 가져오기
while(true) {
int data = fis.read(); //1byte 단위로 읽어옴(한글깨짐)
if (data == -1) { //EOF -1 리턴
break; //반복문 해제
}
System.out.printf("%c", data); //char로 출력했을 경우 -> 한글 깨져서 출력됨
}
} catch (Exception e) {
System.out.println(e);
} finally {
// 자원반납
try {
if (fis != null) {fis.close();}
} catch (Exception e) {}
}
부호 흐름
- 문자만 입력/출력할 때 사용
- 문자 단위의 I/O(2바이트)
- 독자, 작가
파일 판독기
String fileName = "data.txt"; //절대경로 주지않으면 현재경로에서 찾음
FileReader fr = null; //try-catch문 사용으로 인해 외부에 선언해야함
try {
fr = new FileReader(fileName); //파일 가져오기
while(true) {
int data = fr.read(); //2byte 단위로 읽어옴
if (data == -1) { //EOF -1 리턴
break; //반복문 해제
}
System.out.printf("%c", data); //char로 출력했을 경우 -> 한글 깨지지 않고 출력됨
}
} catch (Exception e) {
System.out.println(e);
} finally {
// 자원반납
try {
if (fr != null) {fr.close();}
} catch (Exception e) {}
우회로
다른 스트림과 연결하여 다양한 유용한 기능을 제공하는 스트림.
InputStreamReader: 바이트 스트림을 문자 스트림으로 변환
버퍼링됨-: 향상된 I/O 성능
Data- : 데이터 입/출력의 기본형
인쇄- : 개행을 처리하고 형식이 지정된 문자열을 출력합니다.
Object-: 객체 진입/퇴장
버퍼링된 리더
향상된 타이핑 성능
Enter(\n)를 기반으로 한 줄씩 읽기
String fileName = "data.txt"; //절대경로 주지않으면 현재경로에서 찾음
FileReader fr = null; //try-catch문 사용으로 인해 외부에 선언해야함
BufferedReader br = null; //try-catch문 사용으로 인해 외부에 선언해야함
try {
fr = new FileReader(fileName); //파일 가져오기
br = new BufferedReader(fr); //보조 스트림에 넣기
while(true) {
String line = br.readLine(); //엔터(\\n)를 기준으로 한줄씩 가져오기
if (line == null) { //EOF null 리턴
break; //반복문 해제
}
System.out.printf("%c", line);
}
} catch (Exception e) {
System.out.println("파일 읽기 실패 : " + e);
} finally {
// 자원반납
try {
if (br != null) {br.close();} //바깥 스트림부터 닫기
} catch (Exception e) {}
try {
if (fr != null) {fr.close();}
} catch (Exception e) {}
}
PrintWriter
줄 바꿈 처리 및 형식이 지정된 문자열 출력
String fileName = "d:/java202301/sungjuk.txt";
FileWriter fw = null;
PrintWriter out = null;
try {
// append true -> 추가, false -> 덮어쓰기
fw = new FileWriter(fileName, true);
//autoFlush true -> 버퍼를 청소하면서 사용
out = new PrintWriter(fw, true);
// oop0313.Test07_format.java참조
// System.out.println(); 콘솔창에 출력
// out.println(); 해당 파일에 출력
out.println("무궁화,95,90,100");
out.println("홍길동,100,100,100");
out.println("라일락,90,95,35");
out.println("개나리,85,70,75");
out.println("진달래,35,40,60");
System.out.println("sungjuk.txt 데이터 파일 완성");
} catch (Exception e) {
System.out.println("파일 쓰기 실패");
e.printStackTrace();
} finally {
// 자원반납
try {
if (out != null) {out.close();} //바깥 스트림부터 닫기
} catch (Exception e) {}
try {
if (fw != null) {out.close();}
} catch (Exception e) {}
}
