JAVA-I/O-File

 

[File]

File 클래스

파일(a.txt) 생성, 수정, 삭제

디렉토리(폴더) 생성, 삭제

주로 사용: 파일정보, 폴더정보

C#: File, Directory 클래스

절대경로: C:\, D:\, C:\Temp\a.txt

상대경로: 나를 중심으로

public static void main(String[] args) {
	String path="C:\\Temp\\file.txt"; //기존에 만들어진 파일 정보만
	File f = new File(path);
	//f.createNewFile() //파일생성
	String filename = f.getName();
	System.out.println("파일명" + filename);

	System.out.println("전체경로: " + f.getPath());
	System.out.println("절대경로: " + f.getAbsolutePath());
	System.out.println("폴더 여부: " + f.isDirectory());
	System.out.println("파일 여부: " + f.isFile());
	System.out.println("파일 크기: " + f.length() + "byte");
	System.out.println("부모경로: " + f.getParent());
	System.out.println("파일 존재 여부: " + f.exists());

	//f.delete()   return type >> true, false
	//f.canRead() 사용가능 여부(읽기전용인지 아닌지)
}
//main 프로그램의 시작점
public static void main(String[] args) {
	//System.out.println(args.length);
	//System.out.println(args[0]);
	//System.out.println(args[1]);

	if(args.length != 1) {
		System.out.println("사용법: java 파일명 [디렉토리명]");
		System.exit(0); //프로세스 강제종료
	}
	//java Ex08... C:\\Temp
	//args[0] = C:\\Temp 정보
	File f = new File(args[0]);
	if(!f.exists() || !f.isDirectory()) {
		//존재하지 않거나 또는 디렉토리가 아니라면
		System.out.println("유효하지 않은 경로");
		System.exit(0);
	}
	//존재하는 경로
	File[] files = f.listFiles(); //하위 자원 (각각을 파일 객체 타입으로)
	for(int i = 0; i < files.length; i++) {
		String name = files[i].getName(); //폴더명, 파일명
		System.out.println(files[i].isDirectory() ? "DIR: " + name : name);
	}
}

[Format]

public static void main(String[] args) {
	/*
	Format 클래스
		
	화폐단위 처리
	DecimalFormat df = new DecimalFormat("#,###.0");
	String result = df.format(1234567.89);
	System.out.println(result);
	
	날짜 형식 처리
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일");
	String strDate = sdf.format(new Date());
	System.out.println(strDate);
	
	문자열 처리
	String message = "회원 Id :{0} \n회원 이름 : {1} \n회원 전화번호 : {2}";
	String result = MessageFormat.format(message, userId, userName, userTel);
	*/
	
	File dir = new File("C:\\Temp");
	File[] files = dir.listFiles(); //모든 자원(폴더 또는 파일)
	
	for(int i = 0; i < files.length; i++) {
		File file = files[i];
		String name = file.getName(); //폴더명, 파일명
		
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mma");
		String atrribute = "";
		String size = "";
		
		if(files[i].isDirectory()) {
			atrribute = "<DIR>";
		}else { //나머지는 파일(a.txt, copy.jpg ...)
			size = file.length() + "byte";
			atrribute = file.canRead() ? "R" : "";
			atrribute += file.canWrite() ? "W" : "";
			atrribute += file.isHidden() ? "H" : "";
		}
		System.out.printf("%s   %3s   %10s   %s   \n",
						df.format(file.lastModified()),
						atrribute,
						size,
						name);
		}
	}
}
static int totalfiles=0; //static 함수가 공유하는 static자원
static int totaldirs=0;
public static void main(String[] args) {
	if(args.length != 1) {
		System.out.println("사용법 : java [파일명] [경로명]");
		System.out.println("예시   : java Ex10_File C:\\Temp");
		System.exit(0); //프로세스 종료
	}
	File f = new File(args[0]); //"C:\\Temp"
		
	if(!f.exists() || !f.isDirectory()) {
		System.out.println("유효하지 않은 디렉토리");
		System.exit(0);
	}
	//정상적인 경로 판단
	printFileList(f);
	System.out.println("총 파일수 :" + totalfiles);
	System.out.println("총 폴더수 :" + totaldirs);
}
	static void printFileList(File dir) {
		System.out.println("[Full Path :" +  dir.getAbsolutePath()  + "]");
		
		ArrayList<Integer> subDir = new ArrayList<>();
		File[] files = dir.listFiles(); //하위정보
		
		//C:\\Temp  >  [0] a.txt
		//             [1] TEST
		//             [2] c.jpg
		
		for(int i = 0 ; i < files.length ; i++) {
			String filename = files[i].getName(); //파일명 or 폴더명
			System.out.println(files[i]);
			if(files[i].isDirectory()) {
				filename = "<DIR>[" + filename  +"]";
				subDir.add(i); //폴더인 경우에 add() 
				//[0][3][4][10]
			}else {
				filename = filename +"  /  "+ files[i].length() + "Byte";
			}
			System.out.println("  " + filename);
	}
	//////////////////////////////////////////////////////////////
	
		int dirNum = subDir.size();
		int fileNum = files.length - dirNum;
			
		//누적값
		totaldirs += dirNum; //폴더 개수 누적
		totalfiles += fileNum;//파일 개수 누적
		
		System.out.println("[Current dirNum] : " + dirNum);
		System.out.println("[Current fileNum] : " + fileNum);
		System.out.println("********************************");
		
		for(int j = 0 ; j < subDir.size(); j++) {
			int index = subDir.get(j);
			// 1  3  4
			//[0][1][2]
			printFileList(files[index]);
		}
		
		
		/*
		 C:\\Temp
		 files배열
		 [0] > 1.txt
		 [1] > TEST
		 [2] > TEST2
		 [3] > 2.jpg
		 [4] > NEW

			 subDir 컬렉션 > [0] => 1
			              [1] => 2
			              [2] => 4	
		*/
	}
}