java.io.File 클래스
디스크에 있는 파일이나 디렉터리의 경로를 관리하는 클래스입니다. File 클래스는 파일이나 디렉터리 경로를 추상화하여 파일의 크기나 디렉터리내의 자식 디렉터리 정보 등을 알 수 있습니다. 그 밖에 파일의 생성과 삭제, 파일의 최종 수정 날짜를 변경하는 등의 기능도 제공합니다.
File 클래스의 생성자와 메서드
| 생성자 | 설명 |
|---|---|
| File(File parent, String child) | File 객체 부모 경로명과 문자열인 자식 경로명으로부터 새로운 File 인스턴스를 생성한다. |
| File(String pathname) | 지정된 경로 문자열을 이용하여 새로운 File 인스턴스를 생성한다. |
| File(String parent, String child) | 부모 경로 문자열과 자식 경로 문자열을 사용하여 File 인스턴스를 생성한다. |
| File(URI uri) | 지정된 URI를 사용하여 File 인스턴스를 생성한다. |
| 리턴 타입 | 메서드 | 설명 |
|---|---|---|
| boolean | canExecute() | 대상 경로의 파일이 실행 가능한 파일이면 true, 아니면 false 값을 리턴한다. |
| boolean | canRead() | 대상 경로의 파일이 읽기 가능한 파일이면 true, 아니면 false 값을 리턴한다. |
| boolean | canWrite() | 대상 경로의 파일이 쓰기 가능한 파일이면 true, 아니면 false 값을 리턴한다. |
| boolean | createNewFile() | 대상 경로의 빈(empty) 파일을 생성한다. 성공하면 true, 아니면 false 값을 리턴한다. |
| boolean | delete() | 대상 경로의 파일 삭제에 성공하면 true, 아니면 false 값을 리턴한다. |
| boolean | exists() | 대상 경로의 파일이 존재하면 true, 아니면 false 값을 리턴한다. |
| String | getAbsolutePath() | 대상 경로의 절대 경로명을 리턴한다. |
| String | getCanonicalPath() | 대상 경로의 정규 경로명을 리턴한다. |
| String | getName() | 대상 경로의 파일명이나 디렉터리명을 리턴한다. |
| boolean | isDirectory() | 대상 경로가 디렉터리이면 true, 아니면 false 값을 리턴한다. |
| boolean | isFile() | 대상 경로가 파일이면 true, 아니면 false 값을 리턴한다. |
| String[] | list() | 대상 경로의 모든 파일과 디렉터리를 문자열 배열로 리턴한다. |
| boolean | mkdir() | 대상 경로 상의 디렉터리를 만들면 true, 아니면 false 값을 리턴한다. |
| boolean | renameTo(File dest) | 지정된 파일명으로 변경한다. |
| long | lastModified() | 지정된 파일의 최종 변경 시간을 밀리초로 리턴한다. |
| long | length() | 지정된 파일의 크기를 리턴한다. |
File 클래스를 사용한 예
package net.jeonsam.examples;
import java.io.*;
class FileInfo {
/**
* @param args
*/
public static void main(String[] args) throws IOException {
String filePath = "C:\\";
File f1 = new File(filePath);
String list[] = f1.list();
for (int i = 0; i < list.length; i++) {
File f2 = new File(filePath, list[i]);
if (f2.isDirectory()) {
System.out.println(list[i] + " : 디렉터리");
} else {
System.out.println(list[i] + " : 파일(" + f2.length() + ")bytes");
}
}
File f3 = new File("C:\\test.txt");
System.out.println(f3.createNewFile());
System.out.println(f3.getAbsolutePath());
System.out.println(f3.getCanonicalPath());
System.out.println(f3.getPath());
System.out.println(f3.getName());
System.out.println(f3.getParent());
File f4 = new File("C:\\test.txt");
File f5 = new File("C:\\test1.txt");
System.out.println(f4.renameTo(f5));
}
}
File 객체로 할 수 있는 작업들
① 기존 파일을 나타내는 File 인스턴스를 생성한다.
File f = new File("MyFile.txt");
② 새로운 디렉터리를 생성한다.
File dir = new File("MyDirectory");
dir.mkdir();
③ 디렉터리의 내용을 출력한다.
if (dir.isDirectory()) {
String[] dirContents = dir.list();
for (int i = 0; i < dirContents.length; i++) {
System.out.println(dirContents[i]);
}
}
④ 파일이나 디렉터리의 절대 경로명을 출력한다.
System.out.println(dir.getAbsolutePath());
⑤ 파일이나 디렉터리를 삭제한다.
boolean isDeleted = f.delete();
텍스트 파일 읽기
BufferedReader reader = new BufferedReader(new FileReader(new File());
버퍼를 이용하여 텍스트 파일의 내용을 한 행씩 읽어들이는 예입니다. BufferedReader만 close 시키면 다른 스트림도 자동으로 close 됩니다.
package net.jeonsam.examples;
import java.io.*;
class ReadTextFile {
/**
* @param args
*/
public static void main(String[] args) {
try {
File myFile = new File("C:\\MyText.txt");
FileReader fileReader = new FileReader(myFile);
BufferedReader reader = new BufferedReader(fileReader);
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
split()을 이용하여 파싱하기
String str = "Thinking in Java/중급서"
String[] res = str.split("/");
for (String t : res) {
System.out.println(t);
}
텍스트 파일 쓰기
BufferedWriter writer = new BufferedWriter(new FileWriter(new File());
연습문제.
이름/전화번호 형식으로 저장된 텍스트 파일을 읽어서 이름에 해당하는 전화번호 찾기

