상세 컨텐츠

본문 제목

고급 자바_1229-1

자바

by 정재화니 2022. 12. 29. 11:51

본문

입출력 부분에서 File 객체만들기를 연습해보겠습니다.

 

1. new File(String 파일 또는 경로)
 ==> 디렉토리와 디렉토리 사이 또는 디렉토리와 파일명 사이의 구분문자는 슬레쉬('/')를 사용하거나
 역슬레쉬('\')를 사용할 수 있다.

 

File file1 = new File("D:\\highjava\\D_other\\test.txt"); //구분문자는 역슬레쉬('\')를 사용
		
		System.out.println("파일명: " + file1.getName());
		System.out.println("파일일까? : " + file1.isFile());
		System.out.println("디렉토리일까?" + file1.isDirectory());
		System.out.println();
		
		File file2 = new File("D:/highjava/D_other");
		System.out.println("파일명: " + file2.getName());
		System.out.println("파일일까? " + file2.isFile());
		System.out.println("디렉토리일까? " + file2.isDirectory());
		System.out.println();

미리 D_other와 test 파일을 만들 놓고 확인해 봅니다.

테스트는 파일이고 D_other는 디렉토리인 것을 알 수 있다.


디렉토리(폴더)를 만들어 보겠습니다.

- mkdir()  ==> File객체의 경로 중 마지막 위치의 디렉토리를 만든다.
     ==> 반환값 : 만들기 성공(true), 만들기 실패(false)
     ==> 중간 부분의 경로가 모두 만들어져 있어야 마지막 위치의 경로를 만들 수 있다.
    
  - mkdirs() ==> 중간 부분의 경로가 없으면 중간 부분의 경로도 같이 만들어 준다.

 

두가지의 방법이 있는데

File file5 = new File("D:/highjava/D_other/연습용");
		
		if( !file5.exists()) {
			if( file5.mkdir() ) {
			System.out.println(file5.getName() + " 만들기 성공 !!!");
			}else {
			System.out.println(file5.getName() + " 만들기 실패 ~~~");
			}
		}else {
			System.out.println(file5.getName() + " 은 이미 있습니다.");
		}
		System.out.println();
		
		File file6 = new File("D:/highjava/D_other/test/java/src");
		if( ! file6.exists()) {
			if(file6.mkdirs()) {
				System.out.println(file6.getName() + " 만들기 성공 !!!");
			}else {
				System.out.println(file6.getName() + " 만들기 실패 ~~~");
			}
		}else {
			System.out.println(file5.getName() + " 은 이미 있습니다.");
		}
		System.out.println();

mkdirs()는 중간 부분의 경로가 없으면 경로도 같이 만들어 주는 것을 알 수 있습니다.


다음은 크기와 경로를 알아보겠습니다.

	File f1 = new File("D:\\highjava\\D_other\\test.txt");
		
		System.out.println(f1.getName() + "의 크기: " + f1.length()+ "bytes");
		System.out.println("path : " + f1.getPath());
		System.out.println("absolute Path : "+ f1.getAbsolutePath());
		System.out.println();
		
		File f2 = new File(".");
		System.out.println("path : " + f2.getPath());
		System.out.println("absolute Path : "+ f2.getAbsolutePath());
		System.out.println();
		
		if(f1.isFile()) {
			System.out.println(f1.getName() + "은(는) 파일입니다.");
		}else if(f1.isDirectory()) {
			System.out.println(f1.getName() + "은(는) 디렉토리(폴더)입니다.");
		}else {
			System.out.println(f1.getName()+ "은(는) 뭘까요???");
		}
		System.out.println();
		
		if(f2.isFile()) {
			System.out.println(f2.getName() + "은(는) 파일입니다.");
		}else if(f2.isDirectory()) {
			System.out.println(f2.getName() + "은(는) 디렉토리(폴더)입니다.");
		}else {
			System.out.println(f2.getName()+ "은(는) 뭘까요???");
		}
		System.out.println();
		
		File f3 = new File("D:\\highjava\\D_other\\sample.exe");  // 디스크에 존재하지 않는 파일을 지정했을 때
		if(f3.isFile()) {
			System.out.println(f3.getName() + "은(는) 파일입니다.");
		}else if(f3.isDirectory()) {
			System.out.println(f3.getName() + "은(는) 디렉토리(폴더)입니다.");
		}else {
			System.out.println(f3.getName()+ "은(는) 뭘까요???");
		}
		System.out.println();

test는 파일이고 .은 디렉토리 이며 sample은 만들어있지 않기 때문에 뭘까요 라고 나오는 것을 알 수 있다.


특정 디렉토리 안의 파일 목록을 출력해보겠습니다.

public class FileTest03 {

	public static void main(String[] args) {
		FileTest03 test = new FileTest03();
		
		File file = new File("D:\\highjava\\D_other");
		test.displayFileList(file);
		
	}
// 디렉토리 정보를 인수값으로 받아서 해당 디렉토리에 있는 모든 파일과 디렉토리 목록을 출력하는 메서드
	public void displayFileList(File dir) {
		if(!dir.isDirectory()) {
			System.out.println("디렉토리(폴더)만 가능합니다.");
			return;
		}
		
		System.out.println("[" + dir.getAbsolutePath() + "] 디렉토리 내용");
		
		// 해당 디렉토리 안에 있는 모든 파일과 디렉토리 목록을 구한다.
		File[] files = dir.listFiles();  // 파일 객체로 가지고 오는 것
//		String[] files = dir.list();  //스트링 배열로 가지고 오는 것
		
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd a HH:mm");
		
		// 가져온 파일과 디렉토리 목록 개수만큼 반복
		for(int i = 0; i < files.length; i++) {
			String fileName = files[i].getName();
			String attr = "";		// 파일의 속성을 나타낼 변수(읽기, 쓰기, 히든, 디렉토리 구분)
			String size = "";		// 파일의 크기가 저장될 변수
			
			if(files[i].isDirectory()) {
				attr = "<DIR>";
			}else {
				size = files[i].length() + "";
				attr = files[i].canRead() ? "R" : "";
				attr += files[i].canWrite() ? "W" : "";
				attr += files[i].isHidden() ? "H" : "";
				
			}
			
			System.out.printf("%s %5s %12s %s \n", df.format(new Date(files[i].lastModified())), attr, size, fileName );
			
		}
		
	}
}

SimpleDateFormat 을 이용하여 시간을 계산해줍니다.

해당 예제는 cmd에서 dir을 검색했을때 나오는 결과를 비슷하게 만들어 보았습니다.

이전에 만들었던 내용들이 나오는 것을 알 수 있습니다. 

 

 

'자바' 카테고리의 다른 글

고급 자바_0102-2  (0) 2023.01.02
고급 자바_0102_1  (1) 2023.01.02
고급 자바_1227-2  (0) 2022.12.27
고급 자바_1227-1  (2) 2022.12.27
고급자바_1223-1  (0) 2022.12.23

관련글 더보기