[Java] File 클래스 속성 및 사용법
개발/Java2009. 11. 29. 20:18
파일 클래스 속성 및 사용법
1. File 클래스 및 속성
2. 파일 리스트
3. 파일 디렉터리의 파일 갯수와 디렉터리 숫자 보여주기
4. 파일 리스트를 출력
5. 파일 정렬
6. 특정 확장자를 가진 파일 출력
7. 특정한 이름을 포함한 파일의 목록을 출력
8. 지정된 디렉터리에 정의한 확장자를 가진 파일을 삭제
9. 지정된 디렉터리에 파일명이 숫자인 경우 파일명을 변경
1. File 클래스 및 속성
package kr.pe.anaconda.test.io.file; import java.io.File; import java.io.IOException; /** * File 클래스 사용법 및 속성 * @author diem * */ public class FileEx1 { /** * @param args */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File f = new File("c:\\logs\\123.txt"); String fileName = f.getName(); int pos = fileName.lastIndexOf("."); System.out.println("경로를 제외한 파일 이름 : " + f.getName()); System.out.println("확장자를 제외한 파일 이름 : " + fileName.substring(0, pos)); System.out.println("확장자 : " + fileName.substring(pos + 1)); System.out.println("경로를 포함한 파일이름 : " + f.getPath()); System.out.println("파일의 절대경로 : " + f.getAbsolutePath()); System.out.println("파일이 속해 있는 경로 : " + f.getParent()); System.out.println(); System.out.println("File.pathSeparator : " + File.pathSeparator); System.out.println("File.pathSeparatorChar : " + File.pathSeparatorChar); System.out.println("File.separator : " + File.separator); System.out.println("File.separatorChar : " + File.separatorChar); System.out.println(); System.out.println("user.dir : " + System.getProperty("user.dir")); System.out.println("sun.boot.class.path : " + System.getProperty("sun.boot.class.path")); } }
2. 파일 리스트
package kr.pe.anaconda.test.io.file; import java.io.File; /** * 디렉터리 리스트 * @author diem * */ public class FileEx2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub if(args.length != 1){ System.out.println("USAGE : java FileEx2 DIRECTORY"); System.exit(0); } File f = new File("c:\\log"); //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 fileName = files[i].getName(); System.out.println(files[i].isDirectory() ? "["+ fileName +"]" : fileName); } } }
3. 파일 디렉터리의 파일 갯수와 디렉터리 숫자 보여주기
package kr.pe.anaconda.test.io.file; import java.io.File; import java.util.ArrayList; /** * 특정 디렉터리의 파일의 갯수와 디렉터리의 숫자를 보여준다. * @author diem * */ public class FileEx3 { static int totalFiles = 0; static int totalDirs = 0; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub if(args == null || args.length == 0){ args = new String[1]; } System.out.println(args.length); args[0] = "c:\\logs"; if(args.length != 1){ System.out.println("USAGE : java FileEx3 DIRECTORY"); System.exit(0); } File dir = new File(args[0]); if(!dir.exists() || !dir.isDirectory()){ System.out.println("유효하지 않은 디렉토리입니다."); System.exit(0); } printFileList(dir); System.out.println(); System.out.println("총 " + totalFiles + "개의 파일"); System.out.println("총 " + totalDirs + "개의 디렉터리"); } public static void printFileList(File dir) { System.out.println(dir.getAbsolutePath() + " 디렉터리"); File[] files = dir.listFiles(); ArrayList subDir = new ArrayList(); for(int i = 0; i < files.length; i++){ String fileName = files[i].getName(); if(files[i].isDirectory()){ fileName = "["+ fileName +"]"; subDir.add(i+""); } System.out.println(fileName); } int dirNum = subDir.size(); int fileNum = files.length - dirNum; totalFiles += fileNum; totalDirs += dirNum; System.out.println(fileNum + "개의 파일, " + dirNum + "개의 디렉터리"); System.out.println(); for(int i = 0; i < subDir.size(); i++){ int index = Integer.parseInt((String)subDir.get(i)); printFileList(files[index]); } } }
4. 파일 리스트를 출력
package kr.pe.anaconda.test.io.file; import java.io.File; import java.text.SimpleDateFormat; /** * 파일 리스트를 출력한다. * 출력시 파일의 속성과 수정일을 함께 출력한다. * @author diem * */ public class FileEx4 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String currDir = System.getProperty("user.dir"); File dir = new File(currDir); File[] files = dir.listFiles(); for(int i = 0; i < files.length; i++){ File f = files[i]; String name = f.getName(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mma"); String attribute = ""; String size = ""; if(files[i].isDirectory()){ attribute = "DIR"; }else{ size = f.length() + ""; attribute = f.canRead() ? "R" : ""; attribute += f.canWrite() ? "W" : ""; attribute += f.isHidden() ? "H" : ""; } System.out.printf("%s %3s %6s %s\n", df.format(f.lastModified()), attribute, size, name); } } }
5. 파일 정렬
package kr.pe.anaconda.test.io.file; import java.io.File; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Comparator; /** * 파일 정렬을 한다. * @author diem * */ public class FileEx5 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub if (args.length != 1 || args[0].length() != 1 || "tTlLnN".indexOf(args[0]) == -1) { System.out.println("USAGE : java FileEx5 SORT_OPTION "); System.out.println(" SORT_OPTION : "); System.out.println(" t Time asending sort. "); System.out.println(" T Time descending sort. "); System.out.println(" l Length ascending sort. "); System.out.println(" L Length descending sort. "); System.out.println(" n Name asending sort. "); System.out.println(" N Name descending sort. "); } final char option = args[0].charAt(0); String currDir = System.getProperty("user.dir"); File dir = new File(currDir); File[] files = dir.listFiles(); Comparator comp = new Comparator() { public int compare(Object o1, Object o2) { long time1 = ((File) o1).lastModified(); long time2 = ((File) o2).lastModified(); long length1 = ((File) o1).length(); long length2 = ((File) o2).length(); String name1 = ((File) o1).getName().toLowerCase(); String name2 = ((File) o2).getName().toLowerCase(); int result = 0; switch (option) { case 't': if (time1 - time2 > 0) result = 1; else if (time1 - time2 == 0) result = 0; else if (time1 - time2 < 0) result = -1; break; case 'T': if (time1 - time2 > 0) result = -1; else if (time1 - time2 == 0) result = 0; else if (time1 - time2 < 0) result = 1; break; case 'l': if (length1 - length2 > 0) result = -1; else if (length1 - length2 == 0) result = 0; else if (length1 - length2 < 0) result = 1; break; case 'L': if (length1 - length2 > 0) result = 1; else if (length1 - length2 == 0) result = 0; else if (length1 - length2 < 0) result = -1; break; case 'n': result = name1.compareTo(name2); break; case 'N': result = name2.compareTo(name1); break; } return result; } public boolean equals(Object o) { return false; } }; Arrays.sort(files, comp); for (int i = 0; i < files.length; i++) { File f = files[i]; String name = f.getName(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mma"); String attribute = ""; String size = ""; if (files[i].isDirectory()) { attribute = "DIR"; } else { size = f.length() + ""; attribute = f.canRead() ? "R" : ""; attribute += f.canWrite() ? "W" : ""; attribute += f.isHidden() ? "H" : ""; } System.out.printf("%s %3s %6s %s\n", df.format(f.lastModified()), attribute, size, name); } } }
6. 특정 확장자를 가진 파일 출력
package kr.pe.anaconda.test.io.file; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; /** * 특정 확장자를 가진 파일을 출력한다. * @author diem * */ public class FileEx6 { static int found = 0; /** * @param args */ public static void main(String[] args) { if (args.length != 2) { System.out.println("USAGE : java FileEx6 DIRECTORY KEYWORD"); System.exit(0); } File dir = new File(args[0]); String keyword = args[1]; if (!dir.exists() || !dir.isDirectory()) { System.out.println("유효하지 않은 디렉터리 입니다."); System.exit(0); } try { findInFiles(dir, keyword); } catch (IOException e) { e.printStackTrace(); } } public static void findInFiles(File dir, String keyword) throws IOException { // TODO Auto-generated method stub File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { findInFiles(files[i], keyword); } else { //파일이름 String filename = files[i].getName(); //파일 확장자 String extension = filename .substring(filename.lastIndexOf(".") + 1); extension = "," + extension + ","; if(",java,txt,bak,".indexOf(extension) == -1) continue; filename = dir.getAbsolutePath() + File.separator + filename; FileReader fr = new FileReader(files[i]); BufferedReader br = new BufferedReader(fr); String data = ""; int lineNum = 0; while((data = br.readLine()) != null){ lineNum++; if(data.indexOf(keyword) != -1){ found++; System.out.println("["+filename+"("+lineNum+") ]" + data); } } br.close(); } } } }
7. 특정한 이름을 포함한 파일의 목록을 출력
package kr.pe.anaconda.test.io.file; import java.io.File; import java.io.FilenameFilter; /** * 특정한 이름을 포함한 파일의 목록을 보여준다. * @author diem * */ public class FileEx7 { /** * @param args */ public static void main(String[] args) { if (args.length != 1) { System.out.println("USAGE : java FileEx7 pattern"); System.exit(0); } String currDir = System.getProperty("user.dir"); //currDir = "c:\\logs"; File dir = new File(currDir); final String pattern = args[0]; //String[] list = (FilenameFilter filter) String[] files = dir.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { // TODO Auto-generated method stub return name.indexOf(pattern) != -1; } }); for(int i = 0; i < files.length; i++){ System.out.println(files[i]); } } }
8. 지정된 디렉터리에 정의한 확장자를 가진 파일을 삭제
package kr.pe.anaconda.test.io.file; import java.io.File; import java.io.FilenameFilter; /** * 지정된 디렉터리에 정의한 확장자를 가진 파일을 삭제한다. * @author diem * */ public class FileEx8 { static int deleteFiles = 0; /** * @param args */ public static void main(String[] args) { if (args.length != 1) { System.out.println("USAGE : java FileEx8 Extension"); System.exit(0); } String currDir = System.getProperty("user.dir"); currDir = "c:\\logs"; File dir = new File(currDir); //final String ext = "." + args[0]; final String ext = ".bak"; delete(dir, ext); System.out.println(deleteFiles + " 개의 파일이 삭제 되었습니다."); } private static void delete(File dir, String ext) { // TODO Auto-generated method stub File[] files = dir.listFiles(); for(int i = 0; i < files.length; i++){ if(files[i].isDirectory()){ delete(files[i], ext); }else{ String filename = files[i].getAbsolutePath(); if(filename.endsWith(ext)){ System.out.print(filename); if(files[i].delete()){ System.out.println("-삭제 성공"); deleteFiles++; }else{ System.out.println("-삭제 실패"); } } } } } }
9. 지정된 디렉터리에 파일명이 숫자인 경우 파일명을 변경
package kr.pe.anaconda.test.io.file; import java.io.File; /** * 지정된 디렉터리에 파일명이 숫자인 경우 파일명을 변경한다. * ex) 1.gif -> 00001.gif * @author diem * */ public class FileEx9 { /** * @param args */ public static void main(String[] args) { if (args.length != 0) { System.out.println("USAGE : java FileEx9 DIRECTORY"); System.exit(0); } //File dir = new File(args[0]); File dir = new File("c:\\logs"); if(!dir.exists() || !dir.isDirectory()){ System.out.println("유효하지 않은 디렉토리입니다."); System.exit(0); } File[] files = dir.listFiles(); for(int i = 0; i < files.length; i++){ String fileName = files[i].getName(); //파일명 System.out.println("파일이름 :" + fileName); String newFileName = "0000" + fileName; newFileName = newFileName.substring(newFileName.length() - 7); System.out.println("변경된 파일 이름 : " + newFileName ); files[i].renameTo(new File(dir, newFileName)); } } }
'개발 > Java' 카테고리의 다른 글
[java] Properties 읽고 쓰기 (0) | 2009.12.04 |
---|---|
[java] ResourceBundle 예제 (0) | 2009.12.04 |
[Java] 파일에 텍스트 이어서 쓰기 (0) | 2009.11.25 |
[Spring] dbcp와 c3p0 커넥션 풀 유지하기 (0) | 2009.11.25 |
[java] 저장소 정보 확인 (0) | 2009.11.24 |