파일 정보

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Ex001_File {

	public static void main(String[] args) {
		String appDir = System.getProperty("user.dir");
		// System.out.println("현 작업경로 : " + appDir);

		String pathname = appDir + File.separator + "user.txt";
		// File.separator : 윈도우즈는 \, Mac이나 리눅스는 /
		// System.out.println(pathname);

		File f = new File(pathname);
		// exists() : 폴더 또는 파일이 존재하면 true, 없으면 false를 반환
		if (!f.exists()) {
			System.out.println(pathname + " 파일은 존재하지 않습니다.");
			System.exit(0);

		}

		try {
			System.out.println("파일정보...");
			System.out.println("파일명 : " + f.getName()); // 파일명.확장자
			System.out.println("경로명 : " + f.getPath()); // c:\폴더\파일명.확장자
			System.out.println("절대경로명 : " + f.getAbsolutePath()); // c:\폴더\파일명.확장자
			System.out.println("표준경로명 : " + f.getCanonicalPath()); // c:\폴더\파일명.확장자
			
			System.out.println("부모경로 : "+f.getParent()); // c:\폴더
			System.out.println("파일길이(long형, 단위:byte) : " + f.length());
			// f.lastModified() : 1970.1.1부터 파일생성일까지를 ms단위로 환상하여 반환
			System.out.println("파일 생성일자 : " + new Date(f.lastModified()));
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
			String s = sdf.format(new Date(f.lastModified()));
			System.out.println("파일생성일 : " + s);
			System.out.println("읽기 속성 : "+f.canRead());
			System.out.println("쓰기 속성 : "+f.canWrite());
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

System.getProperty("user.dir");으로 현재 작업경로를 알 수 있다.

File.separator : Windows는 \, Mac이나 Linux / 을 나타낸다.

 

f.exists() : 폴더 또는 파일이 존재하면 true, 없으면 false를 반환

System.exit(0) : 프로그램 종료

 

File클래스를 통해 파일명, 경로, 절대경로, 표준경로, 파일길이, 생성일자 ... 등을 알 수 있다.

 


파일 삭제 (1) - 한 개만 삭제

import java.io.File;

public class Ex002_FileDelete {

	public static void main(String[] args) {
		String appDir = System.getProperty("user.dir"); // 현재 작업 경로
		String pathname = appDir + File.separator + "test.txt";

		File f = new File(pathname);

		if (!f.exists()) {
			System.out.println(pathname + "파일이 존재하지 않습니다.");
			System.exit(0);
		}

		boolean b = f.delete();
		// 파일 또는 디렉토리 삭제
		// 한번에 하나의 파일 또는 디렉토리만 삭제 가능
		// 디렉토리는 비어 있어야 삭제가 가능
		if (b) {
			System.out.println("파일이 삭제 되었습니다.");
		} else {
			System.out.println("파일 삭제가 실패 했습니다.");
		}

	}

}

f.delete(); 메소드

- 파일 또는 디렉토리를 삭제한다.

- 한번에 하나의 파일 또는 디렉토리만 삭제가 가능하다.

- 디렉토리는 비어 있어야 삭제가 가능하다.


파일 삭제(2) - 해당 경로에 있는 모든 파일 삭제

import java.io.File;

public class Ex007_FileRemove {
	public static void main(String[] args) {
		String pathname = "C:"+File.separator + "ex";
		FileManager fm = new FileManager();
		
		fm.removeDir(pathname);
		
		System.out.println("디렉토리 또는 파일 삭제 완료...");
	}
}

class FileManager {
	/**
	 * 파일 또는 폴더 삭제 (하위 폴더 및 모든 파일도 제거 되므로 조심해라...)
	 * @param pathname 삭제할 폴더 또는 파일
	 * @return		   폴더 또는 파일 삭제 여부
	 */
	public boolean removeDir(String pathname) {
		boolean b = false;
		
		try {
			File f = new File(pathname); 
			if(f.isDirectory()) { // 폴더이면 속으로 들어가라
				removeSubDir(pathname);
			}
			
			b = f.delete(); // 폴더가 아니면 삭제
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return b;
	}
	
	private void removeSubDir(String pathname) {
		File[] ff = new File(pathname).listFiles();
		try {
			if(ff.length == 0) // 자식이 없는 경우
				return;
			
			for(File f : ff) {
				if(f.isDirectory()) { // 폴더면 또 안으로 들어가기
					removeSubDir(f.getPath()); // 재귀 호출
				}
				f.delete();
			}
		} catch (Exception e) {
		}
	}
	
}

f.delete() 폴더가 아니면 삭제하고 자식이 없는 디렉토리일시에도 삭제한다.

 

디렉토리 일시 안으로 들어가서 파일들을 하나씩 다 삭제하는데, 다시 또 디렉토리면 재귀 호출을 통해 해당 경로에 있는 디렉토리 안으로 들어가서 또 파일을 하나씩 다 삭제한다.


파일 리스트

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Ex004_FileList {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String s;
		
		try {
			System.out.print("경로 ? ");
			s = br.readLine();
			dirList(s);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void dirList(String pathname) {
		// 폴더에 존재하는 폴더 또는 파일 리스트 확인하기
		File file = new File(pathname);
		
		if ( ! file.exists()) {
			System.out.println("디렉토리가 존재하지 않습니다.");
			return;
		}
		
		if(! file.isDirectory()) {
			System.out.println("디렉토리가 아닙니다.");
			return;
		}
		
		File [] ff = file.listFiles();
			// 폴더에 존재하는 모든 폴더 또는 파일에 대한 File 객체를 반환
		try {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
			String s;
			for(File f : ff) {
				s = sdf.format(new Date(f.lastModified()));
				if(f.isFile()) {
					System.out.print(f.getName()+"\t");
					System.out.print(s+"\t");
					System.out.println(f.length()+"bytes");
				} else if(file.isDirectory()) {
					System.out.println("["+f.getName()+"]...");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
		
	}

file.exists() 입력한 경로에 파일/디렉토리가 존재하지 않으면 false를 반환한다.

file.isDirectory() 입력한 경로가 디렉토리면 true, 아니면 false를 반환한다.

file.listFiles() 입력한 경로에 존재하는 모든 파일, 디렉토리를 파일 배열로 반환한다.

 

파일은 파일명, 생성날짜, 파일길이를 출력하고

디렉토리는  [ ] 대괄호로 출력한다.


파일 만들기

import java.io.File;

public class Ex005_FileMakeDir {

	public static void main(String[] args) {
		String pathname = "c:"+File.separator+"ex"+File.separator+"test";
		
		try {
			File f = new File(pathname);
			
			if(! f.exists()) {
				f.mkdirs(); // 상위 폴더가 존재하지 않으면 상위 폴더도 생성함
				// f.mkdir(); // 상위 폴더가 존재하지 않으면 폴더를 생성하지 않음
				System.out.println("디렉토리를 생성했습니다.");
			} else {
				System.out.println("존재하는 디렉토리입니다.");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

f.mkdirs() 상위 폴더가 존재하지 않으면 상위 폴더도 생성한다. 즉 ex가 없으면 ex도 만들고 test도 만든다.

f.mkdir() 상위 폴더가 존재하지 않으면 폴더를 생성하지 않음. 즉, ex가 없으면 test가 만들어지지 않는다.


파일 이름 변경하기

import java.io.File;
import java.util.Calendar;

public class Ex006_FileRename {

	public static void main(String[] args) {
		String appDir = System.getProperty("user.dir");
		String pathname = appDir + File.separator + "ex.txt";
		
		File f = new File(pathname);
		if(! f.exists()) {
			System.out.println(pathname+" - 존재하지 않음...");
			System.exit(0);
		}
		
		// 확장자(.txt)
		String fileExt = pathname.substring(pathname.lastIndexOf("."));
		
		Calendar cal = Calendar.getInstance(); // 현재 시스템의 날짜/시간을 가지고 있음
		String newName = String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$ts",  cal);
		// 1$ 는 첫번째 변수, 
		newName +=System.nanoTime() + fileExt;
		// System.out.println(newName);
		
		try {
			String newFilename = appDir + File.separator + newName ;
			File dest = new File(newFilename);
			
			// 파일 또는 디렉토리 이름 변경
			f.renameTo(dest);
			System.out.println("파일 이름 변경 완료...");
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

}

f.renameto(File dest); 파일 또는 디렉토리 이름을 변경해준다.

 

확장자가 변경되면 안되므로 substring을 통해 마지막 . 뒤에는 따로 저장해 놓는다.

그리고 주고 싶은 이름을 설정하고 확장자를 다시 붙이면 된다.

 


 

+ Recent posts