JAVA/수업

T02FileTest(exists,createNewFile,listFiles,list,displayFileList)

lavender1122 2024. 2. 2. 19:46

0. 객체 생성

File f1 = new File("d:/D_Other/sample.txt");
File f2 = new File("d:/D_Other/test.txt");
File f3 = new File("d:/D_Other");

.exists() 

  • 파일 존재 여부 확인 존재 true, 존재 안하면 false
if(f1.exists()) {
			System.out.println(f1.getAbsolutePath() + " 은 존재합니다.");
		}else {
			System.out.println(f1.getAbsolutePath() + " 은 없는 파일 입니다");
            }

 

.createNewFile()

  • 파일 생성
if(f1.createNewFile()) {
			System.out.println(f1.getAbsolutePath() + "  파일을 생성했습니다");
		}else {
			System.out.println(f1.getAbsolutePath() + "  파일이 이미 생성했습니다");
		}

.listFiles() 

  • 폴더 안에 있는 디렉토리 파일객체 배열
	File[] files = f3.listFiles();
		for (File f : files) {
			System.out.print(f.getName() + " => ");
			//isFile() : 파일 여부 확인
			if(f.isFile()) {
				System.out.println("파일");
		}else if(f.isDirectory()) {
			System.out.println("디렉토리(폴더)");
		}
	}

 

 


list()

  • 폴더안에 있는 파일이름만 String으로 바꿈
//list() : 폴더안에 있는 파일이름만 String으로 바꿈
String[] fileNames = f3.list();
for (String fileName : fileNames) {
	System.out.println(fileName);
}

 

displayFileList()

  • 지정된 디렉토리(폴더)에 포함된 파일 및 디렉토리 목록을 보여주기 위한 메서드

0. 객체생성

public static void main(String[] args) throws IOException {
	displayFileList(new File("d:/D_Other"));
	}

1. 메서드 생성

// 지정된 디렉토리(폴더)에 포함된 파일 및 디렉토리 목록을 보여주기 위한 메서드
	public static void displayFileList(File dir) {
		System.out.println("["+ dir.getAbsolutePath()+ "] 디렉토리의 내용");
		
		//디렉토리 안의 모든 파일 목록을 가져온다.
		File[] files = dir.listFiles();
		
		//하위 디렉토리의 인덱스 정보를 저장하기 위한 List 객체 생성
		List<Integer> subDirIndexList = new ArrayList<Integer>();
		
		// 날짜 정보를 출력하기 위한  포맷터 객체 생성하기
		SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd a hh:mm");
		
		for (int i = 0; i<files.length; i++) {
			String attr = ""; // 파일의 속성정보(읽기, 쓰기, 숨김파일 여부, 디렉토리 구분)
			String size = ""; // 파일 크기
			
			if(files[i].isDirectory()) {
				attr = "<DIR>";
				subDirIndexList.add(i);
			}else {
				size = files[i].length() + "";
				//canRead() : 읽을 수 있는 권한이 있는지 확인
				attr = files[i].canRead() ? "R" : " ";
				//canWrite() : 수정 할수 있는 권한이 있는지
				attr += files[i].canWrite() ? "W" : " ";
				//isHidden() : 숨김 파일 확인
				attr += files[i].isHidden() ? "H" : " ";
			}
			//예시) attr = RW_;
			//%숫자s: 숫자만큼 지정 
			//%5s : 5개의 포맷지정 우측정렬
			//%-5s : 5개의 포맷지정 좌측정렬
			System.out.printf("%s %-5s %12s %s\n", sdf.format(new Date(files[i].lastModified())),
							attr,size, files[i].getName());
					
			
		}//for문 끝

 

더보기

1.1 displayFileList(File 파라미터)

객체생성할때 파라미터 안에 파일경로 적어둠


1.2 디렉토리 안의 모든 파일목록을 배열을 통해서 가져옴

File[] files = dir.listFiles();

① listFiles() : 폴더안에있는 디렉토리를 파일객체로 배열

② dir: d:/D_Other

③ dir.listFiles();  d:/D_Other 폴더 안에 있는 디렉토리를 파일객체로 배열 함

④ File[] files = dir.listFiles();

    →   dir.listFiles();을 files(파일배열타입 )에 대입

1.3 for문

 .isDirectory() : 폴더여부 있으면 truen 없으면 false

files.length : 파일이 총 개수

files[i].length() : 해당 되는 파일의 크기(몇 바이트)

files[i].canRead() : 해당 되는 파일이 읽을 수 있는 권한이 있는지 확인

files[i].canWrite() : 해당 되는 파일이 수정 할수 있는 권한이 있는지

files[i].isHidden() :  해당 되는 파일이 숨김 파일 확인

 

subDirIndexList.size() : 폴더 안의 하위폴더 개수

int dirCount = subDirIndexList.size(); // 폴더 안의 하위폴더 개수
int fileCount = files.length - dirCount; // 폴더 안의 파일 개수
		
System.out.println(fileCount + " 개의 파일, " + dirCount + " 개의 디렉토리");
		
System.out.println();
		
//재귀호출
for (int i = 0; i < subDirIndexList.size(); i++) {
	//하위폴더의 내용들도 출력하기 위해
	// 재귀호출을 한다.
displayFileList(files[subDirIndexList.get(i)]);
					
		}


원본

더보기
package kr.or.ddit.basic;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class T02FileTest {

	public static void main(String[] args) throws IOException {
		
		File f1 = new File("d:/D_Other/sample.txt");
		File f2 = new File("d:/D_Other/test.txt");
		//exists() : 파일 존재 여부 확인 존재하면 true, 존재안하면 false
		if(f1.exists()) {
			System.out.println(f1.getAbsolutePath() + " 은 존재합니다.");
		}else {
			System.out.println(f1.getAbsolutePath() + " 은 없는 파일 입니다");
			//createNewFile() : 파일생성
			if(f1.createNewFile()) {
				System.out.println(f1.getAbsolutePath() + "  파일을 생성했습니다");
				
			}
		}
		if(f2.exists()) {
			System.out.println(f2.getAbsolutePath() + " 은 존재합니다.");
		}else {
			System.out.println(f2.getAbsolutePath() + " 은 없는 파일 입니다");
		}
		System.out.println("----------------------------------");
		
		File f3 = new File("d:/D_Other");
		//listFiles() : 폴더안에있는 디렉토리를 파일객체로 배열
		File[] files = f3.listFiles();
		for (File f : files) {
			System.out.print(f.getName() + " => ");
			//isFile() : 파일 여부 확인
			if(f.isFile()) {
				System.out.println("파일");
		}else if(f.isDirectory()) {
			System.out.println("디렉토리(폴더)");
		}
	}
		System.out.println("=================================");
		//list() : 파일안에 있는 파일이름만 String으로 바꿈
		String[] fileNames = f3.list();
		for (String fileName : fileNames) {
			System.out.println(fileName);
		}
		System.out.println("---------------------------------------");
		System.out.println();
		
		displayFileList(new File("d:/D_Other"));
		
		
	}
	
	// 지정된 디렉토리(폴더)에 포함된 파일 및 디렉토리 목록을 보여주기 위한 메서드
	public static void displayFileList(File dir) {
		System.out.println("["+ dir.getAbsolutePath()+ "] 디렉토리의 내용");
		
		//디렉토리 안의 모든 파일 목록을 가져온다.
		File[] files = dir.listFiles();
		
		//하위 디렉토리의 인덱스 정보를 저장하기 위한 List 객체 생성
		List<Integer> subDirIndexList = new ArrayList<Integer>();
		
		// 날짜 정보를 출력하기 위한  포맷터 생성하기
		SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd a hh:mm");
		
		for (int i = 0; i<files.length; i++) {
			String attr = ""; // 파일의 속성정보(읽기, 쓰기, 숨김파일 여부, 디렉토리 구분)
			String size = ""; // 파일 크기
			
			if(files[i].isDirectory()) {
				attr = "<DIR>";
				subDirIndexList.add(i);
			}else {
				size = files[i].length() + "";
				//canRead() : 읽을 수 있는 권한이 있는지 확인
				attr = files[i].canRead() ? "R" : " ";
				//canWrite() : 수정 할수 있는 권한이 있는지
				attr += files[i].canWrite() ? "W" : " ";
				//isHidden() : 숨김 파일 확인
				attr += files[i].isHidden() ? "H" : " ";
			}
			//예시) attr = RW_;
			//%숫자s: 숫자만큼 지정 
			//%5s : 5개의 포맷지정 우측정렬
			//%-5s : 5개의 포맷지정 좌측정렬
			System.out.printf("%s %-5s %12s %s\n", sdf.format(new Date(files[i].lastModified())),
							attr,size, files[i].getName());
					
			
		}//for문 끝
		
		int dirCount = subDirIndexList.size(); // 폴더 안의 하위폴더 개수
		int fileCount = files.length - dirCount; // 폴더 안의 파일 개수
		
		System.out.println(fileCount + " 개의 파일, " + dirCount + " 개의 디렉토리");
		
		System.out.println();
		
		//재귀호출
		for (int i = 0; i < subDirIndexList.size(); i++) {
			//하위폴더의 내용들도 출력하기 위해
			// 재귀호출을 한다.
			displayFileList(files[subDirIndexList.get(i)]);
					
		}
		
	}

}