file클래스

file도 클래스라는게 존재한다네

주요 메소드를 공부해서 활용할 예정 !! 이거 쭉 보니까 파일정보에 관한 메소드가 많음  활용할 수 있는게 많아 보이니 잘 정리해서 개인프로젝트에 잘 활용 해 보자!!

 

** 참고 *** 

디렉토리의 표기법이 달라서 알아둬야지

\ : 윈도우 식 표기법

/ : UNIX(LINUX) 식 표기법

 

[활용해 볼 객체들 먼저 생성]

String wExistFile = "D:\\CDW\\WORKPLACE\\BasicProj\\src\\HelloWorld.java";    ( \\ 두 개 한 건 이스케이프문자 아니라고오오오 확인하는거 알지알지알지)
String wNoExistFile ="D:\\CDW\\NoExist.txt";
String uRelativeDir="src/io24/node";         => 상대경로
String uAbsoluteDir ="D:/CDW/NODIR";    =>D:가 있으면 절대경로

   파일에 대한 정보를 가진 file객체 두개

File fwExistFile = new File(wExistFile);
File fwNoExistFile = new File(wNoExistFile);   =>  얜 존재하지 않는 파일인데도 에러가 안난다 ?

  디렉토리에 대한 정보를 가진 file객체 두개

File fuRelativeDir = new File(uRelativeDir);
File fuAbsoluteDir = new File(uAbsoluteDir); 

 

1. 파일명 혹은 디렉토리명 얻는 메소드 : String getname();

   파일명 얻기

  fwExistFile.getName()  => HelloWorld.java

  wNoExistFile.getName()  => NoExist.txt

디렉토리명 얻기 

  fuRelativeDir.getName()   => node

  fuAbsoluteDir.getName()   => NODIR

--------------내가만든 getName() 메소드------ 이건 클래스 안에서 만들고 메소드 호출해!  알지알지

private static String getName(String pathName) {

           방법1. split 및 정규표현식

     String[  ] re = pathName.split("[/\\\\]");
                 return re[re.length-1];

          방법2.  string 메소드(lastIndexOF,substring) 사용

      int beginIndex = pathName.lastIndexOf("\\") != -1 ?        =>  "\\" 가 있음? 없음?
                                 pathName.lastIndexOf("\\")+1 :      => 있으면 \\가 있는인덱스번호
                                  pathName.lastIndexOf("/")+1;     => 없으면 / 가 있는 인덱스 번호
          return pathName.substring(beginIndex); 

}

 

2. 파일인지 디렉토리인지 판단하는 메소드 : isFile(),isDirectory()

   true/false를 반환 하는데 이건 파일이나 디렉토리가 존재하지 않아도 false를 반환한다!! 

fwExistFile.isFile()   =>true
fwNoExistFile.isFile()   =>false
fwExistFile.isDirectory() =>false
fuRelativeDir.isDirectory() =>true
fuAbsoluteDir.isDirectory() =>false

 

3.. 파일 및 디렉토리의 존재 여부를 알려주는 메소드:  exists()

       if(fuRelativeDir.exists())
                   if(fuRelativeDir.isFile()) System.out.println("파일이다");
                   else System.out.println("디렉토리다");
System.out.println(fwExistFile.exists() ? fwExistFile.isDirectory() ? "디렉토리다" "파일이다"  : "존재하지 않는다" );

 

4. 파일 혹은 디렉토리의 상대경로 얻기: getpath()  , 절대경로 얻기 :getAbsolutePath()

          *****상대경로로 표기하고, 절대경로 얻을 때 getAbsolutePath() 많이 사용*******

fuRelativeDir의 상대경로: fuRelativeDir.getPath()    =>src\io24\node
fuRelativeDir의 절대경로: fuRelativeDir.getAbsolutePath()   => D:\CDW\WORKPLACE\BasicProj\src\io24\node
fuAbsoluteDir의 상대경로: fuAbsoluteDir.getPath()   => D:\CDW\NODIR 걍 절대경로로 나옴
fuAbsoluteDir의 절대경로: fuAbsoluteDir.getAbsolutePath()  => D:\CDW\NODIR

 

5. 파일 및 디렉토리의 크기 알아내는 메소드 : length 

    파일은 정확한데 디렉토리는 정확하지 않아서 파일일때만 사용하자! , 파일이 존재하지 않을 때도 0 반환

fwExistFile.length()    => 612바이트
fwNoExistFile.length()    =>0바이트 존재 x
fuRelativeDir.length()    =>  이거 정확하지 않음....
fuAbsoluteDir.length()   => 0바이트, 존재x

 

6. 상위 부모 얻기 : getParent()

   상대든 절대든 여러경로를 준 경우에 사용하고 주로 디렉토리에 적용한다.

fuRelativeDir.getParent()   =>src\io24

fuAbsoluteDir.getParent()    =>D:\CDW

 

File fone = new File("file");
System.out.println(fone.getParent());   => null 상위없으면 null
File ftwo =new File("parent", "child");
System.out.println(ftwo.getParent());   => parent

 

7.파일 및 디렉토리 삭제 : delet()  false/true 반환 

System.out.println(fwNoExistFile.delete());   => 없는것은 못 지움 false

파일하나 직접 만들어서 지워보기

File fexist = new File("D:/CDW/지울꺼.txt"); 만들었음

System.out.println(fexist.delete());   => 지워지면 true

 

8. 디렉토리 생성 : mkdir()  이건 부모 디렉토리가 존재해야 함

                             mkdirs()  이건 존재하지 않아도 됨

File fmkdir = new File("src/io24/node/temp");   
System.out.println(fmkdir.mkdir());       => 만들어지면 true

9.파일 읽기/쓰기 가능 판단 :canRead(), canWrite(),canExecute()

File fcan = new File("d:/cdw/can.txt");
System.out.println(fcan.canRead() ? "읽기가능":"읽기불가");  
System.out.println(fcan.canWrite() ? "쓰기가능":"쓰기불가");
System.out.println(fcan.canExecute() ? "실행가능":"실행불가");

 

11. 파일 혹은 디렉토리의 최근 수정된 시간 얻기 : lastModified()

long time =fcan.lastModified();  => 이거 그 1000분의 1초 얻는 그거라서 어마어마함 단독으로 쓰기엔 부담스러움

SimpleDateFormat dataFormat = new SimpleDateFormat("yyyy-MM-dd a h:mm");   

String lastString = dateFormat.format(new Date(time));   =>SimpleDateFormat  이걸써서 보기 좋게 변경하면 됨!

System.out.println("최근수정된 시간:"+lastString);

 

12. 파일이름 변경 :renameTo (file dest)   반환 true/false

       같은 폴더 안이면 파일면이 변경 , 다른폴더면 파일을 이동시킨다.

File fchange = new File("d:/cdw/change.txt");  
File fmove = new File("d:/cdw/change2.txt");    =>우선 두개 생성 하고
System.out.println(fchange.renameTo(fmove));   ==> 하나는 변경해보고
System.out.println(fmove.renameTo(new File("D:/CDW/교안폴더/CHANGE3.TXT")));   =>하나는 이동시켜봄

 

13. 파일목록 및 디렉토리 목록 얻어오기 (기본적으로 배열로 담아온다)

   string [ ] list()   : 파일 및 디렉토리명만변환
   file [ ] listfiles()  : 파일 디렉토리에 대한 파일 객체 배열 변환

 

 이름만 

String[ ] names = fuRelativeDir.list();

for(String name : names) System.out.println(name);

 => 출력

Node.java
nodir
temp

 

이름과 정보들 다같이 변환

File[ ] files = fuRelativeDir.listFiles();

for(File f : files) {
           String name = f.getName();
           String lastModified = dateFormat.format(new Date(f.lastModified()));
           if(f.isFile())System.out.print("파일명:"+name);
           else System.out.print("디렉토리명:"+name);
           System.out.println("최근 수정 시간:"+ lastModified);
      }

=> 출력

파일명:Node.java최근 수정 시간:2022-10-13 오후 8:57
디렉토리명:nodir최근 수정 시간:2022-10-13 오후 8:44
디렉토리명:temp최근 수정 시간:2022-10-13 오후 8:59

 

+ Recent posts