File : 파일(Some.java) / 경로(directory)
경로란 자바의 패키지와 같다. 실제로 존재하지 않으나 (=디스크 상에 존재하지 않음) 파일 객체를 구분하는데 사용되는 논리적 식별자다.
File 객체는 파일의 데이터를 들고있는게 아니라 디스크 상의 파일을 참조하는 기능을 함.
파일의 종류
물리적 파일
: 실제로 디스크 상에 존재하는 파일
논리적 파일
: 실제 디스크에는 존재하지 않음
- 파일 삭제?
파일을 삭제하는 행위는 사실 디스크 상의 데이터를 삭제하지 않는다. 데이터에 대한 참조를 끊는다는 것이 정확한 표현. (참조변수에 null을 대입하는 것과 같은 행위)
디스크 상의 실제 데이터는 우연히 덮어쓰기 되지 않는 이상 사라지지 않음!
- 리눅스에서는 모든 것이 파일. 즉 디렉토리도 파일.
운영체제 제약없는 자바이므로 자연히 자바의 File 클래스에도 경로(directory)가 존재하게 되었다.
- URI (Uniform Resource Identifier)
자원을 구분할 수 있는 통합식별자
URL(Uniform Resource Locator: 정형화 된 리소스 위치표시)을 포함하는 개념
참고
File(path)
: 경로를 한 번에 넣어 생성File(parent, name)
: 경로를 parent와 name으로 나눠넣어 생성 // c:\some\text.txt
File f1 = new File("c:\\some\\test.txt");
File f2 = new File("c:\\some", "test.txt");
File dir = new File("c:\\some");
File f3 = new File(dir, "text.txt");
c:\text\some\abc.txt
: pathc:\text\some\
: parent +abc.txt
: name
exists()
: 객체가 물리적으로 존재하는지 확인 (return : boolean)
파일과 디렉토리를 구분하기 전에 exists()로 물리적 파일이 존재하는지 먼저 확인해야 한다.
isFile()
: 객체가 파일인지 확인 (return : boolean)
isDirectory()
: 객체가 디렉토리인지 확인 (return : boolean)
- 운영체제에 생성/제거 요청할 때는 권한이 필요 -> 없으면 IOException 발생
if(f.exists()) { try { // 파일을 디스크에 생성 f.createNewFile(); // 파일 생성은 '운영체제'가 하는 것! // createNewFile() 은 운영체제에 파일 생성을 요청한다. // 권한이 없을 경우 에러 발생 -> IOException을 대비한 try~catch문 작성 } catch(IOException e) { e.printStackTrace(); } }
createNewFile()
: 객체를 실제 물리적 파일로 생성
mkdir()
: 객체를 실제 디렉토리로 생성
mkdirs()
: 객체를 실제 디렉토리로 생성 (경로에 포함된 모든 실재하지 않는 디렉토리도 함께 생성)
delete()
: 객체를 물리적으로 제거 (디렉토리는 비어있을 때만 삭제 가능)
length()
: 파일 객체의 용량 반환 (return : long)
int가 아닌 long 값 반환됨에 주의
getPath()
: 객체의 경로 반환
getParent()
: 경로 중 parent 반환
getName()
: 파일의 이름 반환
canRead()
: 파일의 읽기권한 확인
canWrite()
: 파일의 쓰기권한 확인
canExecute()
: 파일의 실행권한 확인
lastModified()
: 마지막으로 수정된 시간 반환 (return : long)
- lastModified()는 long값을 반환하므로,
Date클래스와 SimpleDateFormat 클래스를 이용하여 원하는 형식의 String값으로 전환하기SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd a hh:mm"); Date date = new Date(); date.setTime(time); System.out.println("마지막 수정시간 : " + sdf.format(date)); String strDate = "2021-11-04 오전 10:50"; try { Date someday = sdf.parse(strDate); long target = someday.getTime(); System.out.println(target); } catch (ParseException e) { e.printStackTrace(); }
c:\first\target.txt
c:\second
에서 시작 -> ..\first\target.txt
c:\second\sub
에서 시작 -> ..\..\first\target.txt
.
: 현재 위치
..
: 한 칸 위 위치
getPath()
, getParent()
+ getName()
: 파일 객체를 생성할 때 입력한 경로를 그대로 반환한다. (return : String)getAbsolutePath()
: 파일 객체의 절대 경로를 반환한다. (return : String)getAbsoluteFile()
: 절대경로를 지닌 파일 객체를 반환한다. (return : File)getCanonicalPath()
: 파일 객체의 이상경로(최단거리 절대경로)를 반환한다. (return : String)getCanonicalFile()
: 이상경로를 지닌 파일 객체를 반환한다. (return : File)