티스토리 뷰

Java, JavaScript

[Java] File 클래스

체봄 2019. 7. 24. 22:08

[File 클래스]

: 파일을 관리하는 클래스 (java.io.File)

 

생성자 설명
File(File parent, String child) parent 디렉토리에 child 이름의 디렉토리나 파일을 나타내는 File 객체 생성
File(String parent, String child) parent 디렉토리에 child 이름의 디렉토리나 파일을 나타내는 File 객체 생성
File(String pathname) pathname이 나타내는 File 객체 생성 
File(URI uri) file:URI를 추상 경로명으로 변환하여 File 객체 생성

 

 

File 생성자를 통해 File 객체를 만들었을 때, 인스턴스가 생성된 것 뿐이지 실제로 그 파일이 만들어지진 않는다.

-> exists() / isFile() / canWrite() / canRead() 메소드 실행 시 false 반환

 

 

mkdir() 메소드를 이용하면 실제로 디렉토리 생성 가능 !

ex1)

File file = new File("dir");
file.mkdir();

이를 컴파일하면 dir라는 디렉토리가 생성된다.

ex2)

File file2 = new File("dir1", "dir2");
file2.mkdir();

dir1이라는 디렉토리를 만들고, 그 안에 dir2라는 디렉토리를 만드려는 코드이다.

하지만 컴파일해보면 디렉토리가 전혀 생성되지 않는다.

해결방법 : file2.mkdirs(); 로 수정해야 한다.

 

 

ex) File 객체 활용

package StreamEx;

import java.io.File;

public class FileTest {

	public static void dirInfo(File file) {	// 해당 디렉토리 내의 파일or폴더의 정보를 출력
		String[] fList = file.list();
		
		for(String fName : fList) {
			File newFile = new File(file, fName);
			long lm = newFile.lastModified();
			
			System.out.print("파일명 :"+fName);
			System.out.print("\t파일크기:"+newFile.length());
			System.out.printf("\t수정한시간: %tb %td %ta %tT\n", lm,lm,lm,lm);
		}
		
	}
    
	
	public static void main(String[] args) {
		File f1 = new File("C:\\development\\workspace\\IOStudy\\test.txt");	//실재하는 파일
		File f2 = new File("C:\\development\\workspace\\IOStudy\\temp\\temp1");	//실재하지않는 폴더
        File f3 = new File("C:\\development\\workspace\\IOStudy\\bin\\StreamEx"); //실재하는 폴더
		
		if(f1.isFile())
			System.out.println(f1.getPath()+"는 파일입니다.");
		else
			System.out.println(f1.getPath()+"는 폴더입니다.");
		
		if(!f2.exists())	// f2 파일이 존재하지 않는 경우
			f2.mkdirs();
		
		if(f2.isFile())
			System.out.println(f2.getPath()+"는 파일입니다.\n");
		else
			System.out.println(f2.getPath()+"는 폴더입니다.\n");
		
		dirInfo(f3);
	}

}

실행 결과>>

C:\development\workspace\IOStudy\test.txt는 파일입니다.
C:\development\workspace\IOStudy\temp\temp1는 폴더입니다.
       
파일명 :FileInput.class      파일크기:1232  수정한시간: 7월 24 수 22:00:29
파일명 :FileInput2.class    파일크기:1482   수정한시간: 7월 24 수 22:00:29
파일명 :FileOutput.class   파일크기:1062   수정한시간: 7월 24 수 22:00:29
파일명 :FileTest.class       파일크기:847    수정한시간: 7월 24 수 22:00:29
파일명 :FileTest1.class     파일크기:2255   수정한시간: 7월 24 수 22:00:29


 

dirInfo 메소드는 인자에 디렉토리를 나타내는 File 객체를 넘겨주면, 해당 디렉토리 내의 모든 파일과 디렉토리의 이름, 파일크기, 수정한시간을 출력해주는 메소드이다.

해당 디렉토리에 존재하는 모든 파일명과 디렉토리명을 File 객체의 list() 메소드를 통해 String 배열에 저장한다.

File newFile = new File(file, fName); 는 file 객체가 나타내는 디렉토리에 fName이라는 이름을 가진 File 객체(인스턴스)를 생성한다는 의미이다. 여기서, 실제로 해당 파일이 생성되지는 않는다.

이렇게 생성된 File 객체 newFile의 lastModified() 메소드를 이용해 해당 파일을 수정한 시간(월-일-요일-시간)을 가져온다.

이렇게 가져온 수정한 시간의 정보는 C언어에서처럼 %tb(월), %td(일), %ta(요일), %tT(시간) 형식에 맞춰 출력해야하므로 printf 메소드를 사용해 출력한다.

 

main 메소드를 살펴보면, 우선 File 객체 생성 시 경로를 써넣을 때 '\'를 1번이 아니라 2번씩 써주어야 한다.

f1이 나타내는 것은 실제로 존재하는 파일이므로 f1.isFile()의 반환값은 true이다. 

f2는 실제로 존재하지 않는 폴더이므로 f2.exists()가 false를 반환해 if문이 실행되고, mkdirs() 메소드를 통해 temp와 temp1 디렉토리가 실제로 생성된다.

그리고 f2는 파일이 아니라 폴더이므로 f2.isFile()의 반환값은 false이다.

실제로 존재하는 디렉토리를 나타내는 f3을 dirInfo() 메소드의 인자로 넣어주면, 그 디렉토리에 존재하는 파일과 폴더의 정보들이 출력되는 것을 확인할 수 있다.

 

반응형

'Java, JavaScript' 카테고리의 다른 글

[Java] 병합 정렬(Merge Sort)  (0) 2019.07.31
[Java] 문자 스트림  (0) 2019.07.26
[Java] BufferedIOStream, DataIOStream  (0) 2019.07.01
[Java] ByteArrayStream, PipedStream  (0) 2019.06.28
[Java] read() , FileIOStream  (0) 2019.06.23

댓글