입출력하는 대상 중 하나이다.
입출력에 필요한 파일 및 디렉토리에 관한 정보를 제공해준다.
File 객체는 file일 수도 있고 directory 일 수도 있다.
File f = new File("c:\test\a.text");
File f = new File("/Users/yejin/Documents/eclipse_lyj/a.text");
파일의 종류
1) 논리적 파일: 코드 상 존재하는 것으로 디스크 상에 존재하지 않는다.
하지만 디스크에 생기면 그 때는 물리적 파일이다.
2) 물리적 파일: 디스크 상에 존재하는 것이다.
→ 경로는 물리적 존재가 아니라 식별자이다.
즉, File 객체를 구분하기 위해 존재하는 것이다.
파일의 삭제
→ 실제로 파일을 삭제 시 데이터가 삭제되는 것이 아니라 경로가 삭제되는 것!
경로가 삭제될 뿐 파일은 그대로 있기에 다시 복구가 가능하다.
(대신 파일을 찾을 수 없을 뿐)
but 경로 위에 다른 것이 덮어진 경우는 복구가 힘들다.
package kr.ac.green;
import java.io.File;
public class FileEx1 {
public static void main(String[] args) {
//f1과 f2, f3 는 같다.(논리적 파일)
//경로(path)
File f1 = new File("c:\\test\\a.text");
//경로(parent), 파일(name)
File f2 = new File("c:\\test", "a.text");
//File => 파일 or 경로
File dir = new File("c:\\test");
File f3 = new File (dir, "a.text");
//exists : 디스크 상에 파일이 존재하는지를 알 수 있다.(물리적 파일 여부 확인)
//존재 여부가 상당히 중요하다. 있다면 다른사람이 쓰고 있다는 것이라서
System.out.println(f1.exists());
}
}
→ 디스크의 존재 여부는 상당히 중요한데, 이는 있을 경우 다른 사람이 쓰고 있음을 알 수 있기 때문이다.
→ exists( ) : 물리적 파일 여부를 확인해주는 메소드
(디스크 상에 파일이 존재하는지를 알 수 있다.)
만약 존재한다면 true 로 나오며, 없다면 false 로 나온다.
package home;
import java.io.File;
public class MyFileEx3 {
public static void main(String[] args) {
File dir = new File("/Users/yejin/Documents/eclipse_lyj/abc");
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
}
}
→isDirectory( ) : Directory 인지를 알 수 있다.
→isFile( ) : File 인지를 알 수 있다.
실행하면 둘 다 false 로 나오는데 확장자가 없는 파일도 있기에 파일인지 경로인지 모르기에 결과값이 false로 나온다.
제대로 값을 얻어내기 위해서는 논리적으로 존재하는 것이 아닌 물리적으로 존재해야 한다.
package home;
import java.io.File;
public class MyFileEx3 {
public static void main(String[] args) {
File dir = new File("/Users/yejin/Documents/eclipse_lyj/abc");
if(!dir.exists()) {
dir.mkdir();
}else {
dir.delete();
}
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
}
}
위처럼 mkdir( ) 메소드를 통해 directory가 존재하지 않는다면 생성하고 존재한다면 delete( ) 메소드를 통해 삭제해준다.
생성하고 나면 isDirectory( ) 의 결과는 true가 나온다.
컴퓨터에서 연속성 저장성을 가지는 것은 파일이 유일하다.
프로그램에서 사용되는 기능은 4가지로 정의할 수 있다.
이를 CRUD 라고 하며, 각각 다음과 같다.
파일은 물리적인 존재를 생성하는 것이고, 디렉토리는 파일을 위한 경로가 만들어지는 것이다.
파일을 만들 때는 권한이 필요한데, 운영체계에서 부탁해서 만드는데 운영쳬계가 권한을 주지 않으면 IOException 이 발생한다.
package home;
import java.io.File;
import java.io.IOException;
public class MyFileEx3 {
public static void main(String[] args) {
File dir = new File("/Users/yejin/Documents/eclipse_lyj/abc/def");
//디렉토리 한번에 생성하기
dir.mkdirs();
File f = new File(dir, "fileEx1.text");
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
mkdir( ) 는 하나의 디렉토리만 생성이 가능했다면, mkdirs( ) 는 한번에 여러 디렉토리가 생성 가능하다.
내용이 비워져 있지 않으면 delete( ) 를 해도 지워지지 않는다.
이때는 어떻게 할까?
package home;
import java.io.File;
public class FileDeleteEx1 {
//하부 파일이나 디렉토리 모두를 삭제한다.
public static void deleteDirectory(File dir) {
File[] fileList = dir.listFiles();
for(File temp: fileList) {
if(temp.isDirectory()) {
deleteDirectory(temp);
}else {
temp.delete();
}
}
dir.delete();
}
public static void main(String[] args) {
File dir = new File("c:\\mydirectory");
//이래도 안지워지는데 안에 비워지지 않아서 그렇다.
//비워져야지만 삭제 가능하다.
//dir.delete();
deleteDirectory(dir);
}
}