Egloos 728x90

구글 애널리틱스


2008/12/30 16:02

[ Java ] File 객체 ▷ Java 복습



  하드 디스크 내에 파일이나 폴더를 만들고 삭제할 수 있는 흥미로운 File객체. 하지만 사용 방법이 꽤나 헷갈린다고나 할까, 단순한 것 같으면서도 조심해야 할 것이 많은 녀석.
  게다가 Input/OutputStream을 쓰지 않으면 파일 내의 데이터를 읽고 쓸 수도 없다는 것이 치명적이다. 하지만 Input/OutputStream을 사용하려면 File객체를 미리 준비해줘야 하고, File객체로만 가능한 것도 있으니 꼭 알아둬야 하는 녀석이라 다시금 열심히 복습!!


import java.io.File;
import java.io.IOException;
public class FileTestSum {
 public FileTestSum(){
  
  File fileDirSsTest = new File("ssTest"); //File 객체의 생성
  
  if(!fileDirSsTest.exists()){ //.exists() : 해당 File객체에 해당하는 폴더가 있는지 여부를 반환
   fileDirSsTest.mkdir(); //.mkdir() : 폴더를 생성한다.
   System.out.println("@ ssTest폴더를 생성합니다: " + fileDirSsTest.getAbsolutePath());
   //.getAbsolutePath() : 해당 File 객체의 절대경로를 반환.
  }
  
  File fileCfg = new File("ssTest\\ssConfig.ssc");
  //또다른 File 객체의 생성. 보통 폴더 구분은 \ 하나만 사용하나 Java에서 인식시키려면 \\ 2개로 사용해야 함
  if(fileCfg.exists()){
   System.out.println("@ ssConfig.ssc 파일이 존재합니다: " + fileCfg.getAbsolutePath());
  }else{
   try {
    fileCfg.createNewFile(); //파일이 존재하지 않을 경우 새로운 파일을 생성
    System.out.println("@ ssConfig.ssc 파일을 생성하였습니다.");
   } catch (IOException e) { //createNewFile()은 IOException을 날린다.
    System.out.println("!IOException!" + e);
   }
  }
 }
 
 public static void main(String[] args) {
  new FileTestSum();
 }
}


  File 객체를 이용해서 파일이나 폴더를 생성하는 단순한 소스. 파일을 만들 수는 있지만 그 파일 내에 그 내용을 담을 수는 없다는 것이 어쩐지 허무하다는 느낌도...
  Input/OutputStream을 이용한 파일 내의 데이터를 읽고 쓰는 것은 다음 기회에...





import java.io.File;
class FileTest {
   public static void main(String args[]) {
      File f0 = new File("."); //현재 디렉터리를 나타내는 "."를 이용하여 현재 작업위치를 얻어내고 있다. 
      //또는, 현재 사용자 디렉토리를 나타내고 있는 시스템 속성인 "user.dir" 속성을 이용하여 현재 작업 디렉토리를 얻을 수 있습니다.
      File f1 = new File("Test.dat");
      File f2 = new File(f0.getParent(), "Test2.dat"); 
      //public String getParent(): 추상 경로명의 부모 경로에 대한 경로명을 문자열로 얻습니다.
      //이 때, 부모 경로명은 추상 경로명이 갖는 prefix와 경로명에 있는 마지막 이름을 제외한 나머지 이름들을 포함하고 있습니다.
      File f3 = new File(f0.getParent(), "Test3.dat");
      File f4 = new File(f0.getAbsolutePath(), "Test4.dat");
      //public String getAbsolutePath(): 추상 경로명에 대한 절대 경로명을 문자열로 얻습니다.
      //UNIX 시스템 상에서 상대 경로명일 경우, 현재 사용자 디렉토리와 결합하여 절대 경로명을 얻습니다.
      //Win32 시스템 상에서의 상대 경로명은 드라이브 문자를 포함하여, UNIX 시스템과 마찬가지로 현재 사용자 디렉토리와 결합하여 얻습니다.
      File f5 = new File(f0.getAbsolutePath(), "Test5.dat");
      File f6 = new File("newdir");
      File f7 = new File("newdir2");
      System.out.println(" f0.getPath(): "+f0.getPath());
      //public String getPath(): 추상 경로명을 경로명 문자열로 변환하여 얻습니다. 이 때, 디폴트 이름 구분 문자가 적용됩니다.
      System.out.println(" f1.getPath(): "+f1.getPath());
      System.out.println(" f2.getPath(): "+f2.getPath());
      System.out.println(" f3.getPath(): "+f3.getPath());
      System.out.println(" f4.getPath(): "+f4.getPath());
      System.out.println(" f5.getPath(): "+f5.getPath());
      System.out.println(" f6.getPath(): "+f6.getPath());
      System.out.println(" f7.getPath(): "+f7.getPath());
      System.out.println(" f1.getAbsolutePath(): "+f1.getAbsolutePath());
      //public String getAbsolutePath(): 추상 경로명에 대한 절대 경로명을 문자열로 얻습니다.
      //UNIX 시스템 상에서 상대 경로명일 경우, 현재 사용자 디렉토리와 결합하여 절대 경로명을 얻습니다.
      //Win32 시스템 상에서의 상대 경로명은 드라이브 문자를 포함하여, UNIX 시스템과 마찬가지로 현재 사용자 디렉토리와 결합하여 얻습니다.
      try {
         System.out.println("f1.getCanonicalPath(): "+f1.getCanonicalPath());
         //public String getCanonicalPath() throws IOException: 추상 경로명에 대한 유일한 정규 표현 경로명을 얻습니다.
         System.out.println("f4.getCanonicalPath(): "+f4.getCanonicalPath());
      } catch(java.io.IOException e) {
         System.out.println("f1.getCanonicalPath(): "+e);
      }
      System.out.println(" f1.getName(): "+f1.getName());
      //public String getName(): 추상 경로명이 나타내는 파일 또는 디렉토리의 이름을 얻습니다. 이 이름은 경로명 이름에 있는 마지막 이름입니다.
      System.out.println(" f1.getParent(): "+f1.getParent());
      System.out.println(" f1.getPath(): "+f1.getPath());
      //public String getPath(): 추상 경로명을 경로명 문자열로 변환하여 얻습니다. 이 때, 디폴트 이름 구분 문자가 적용됩니다.
      System.out.println(" f1.toString(): "+f1.toString());
      //.toString() @파일 객체의 추상 경로명??
      try {
         System.out.println(" f1.toURL(): "+f1.toURL());
         //public URL toURL() throws MalformedURLException: 추상 경로명을 URL로 변환하여 얻습니다.
      } catch(java.net.MalformedURLException e) {
         System.out.println(" f1.toURL(): "+e);
      }
      System.out.println(" f1.canRead(): "+f1.canRead());
      //public boolean canRead(): 파일이 읽기 가능한지를 얻습니다.
      System.out.println(" f1.canWrite(): "+f1.canWrite());
      ////public boolean canWrite(): 파일이 쓰기 가능한지를 얻습니다.
      System.out.println(" f1.isAbsolute(): "+f1.isAbsolute());
      //public boolean isAbsolute(): 절대 경로명인지를 얻습니다.
      //UNIX 시스템 상에서는 prefix가 "/"를 포함하고 있을 경우, Win32 시스템 상에서는 prefix가 "\\"와 드라이브 문자 또는
      //"\\"를 포함하고 있을 경우 절대 경로명입니다.
      System.out.println(" f1.isDirectory(): "+f1.isDirectory());
      //public boolean isDirectory(): 디렉토리인지를 얻습니다.
      System.out.println(" f1.isFile(): "+f1.isFile());
      //- public boolean isFile(): 파일인지를 얻습니다.
      System.out.println(" f1.isHidden(): "+f1.isHidden());
      //public boolean isHidden(): 숨겨진(hidden) 파일인지를 얻습니다.
      System.out.println(" f1.lastModified(): "+f1.lastModified());
      //public long lastModified(): 파일이 마지막으로 갱신된 시간을 얻습니다. 
      //시간은 epoch (00:00:00 GMT, January 1, 1970)로부터 경과된 밀리초를 나타내며, 값이 0L이면 파일이 존재하지 않거나
      //I/O 에러가 발생했음을 나타냅니다.
      System.out.println(" f1.length(): "+f1.length());
      //public long length(): 파일의 크기를 얻습니다.
      System.out.println(" f1.compareTo(t2): "+f1.compareTo(f2));
      //public int compareTo(File pathname): 두 개의 추상 경로명이 같은지를 검사합니다. UNIX 시스템 상에서는 대소문자를 구분하고,
      //Win32 시스템 상에서는 대소문자 구분이 없습니다. 자신이 크면 양수값, 같으면 0, 작으면 음수값을  각각 얻습니다.
      System.out.println(" f1.exists(): "+f1.exists());
      // public boolean exists(): 파일이 존재하는지를 얻습니다.
      System.out.println(" f2.exists(): "+f2.exists());
      System.out.println(" f3.exists(): "+f3.exists());
      System.out.println(" f4.exists(): "+f4.exists());
      System.out.println(" f5.exists(): "+f5.exists());
      System.out.println(" f6.exists(): "+f6.exists());
      System.out.println(" f7.exists(): "+f7.exists());
      try {
         System.out.println(" f2.createNewFile(): "+f2.createNewFile());
         //public boolean createNewFile() throws IOException: 추상 경로명에 해당하는 파일이 존재하지 않는 경우
         //비어있는 새로운 파일을 생성합니다.
         System.out.println(" f3.createNewFile(): "+f3.createNewFile());
         System.out.println(" f4.createNewFile(): "+f4.createNewFile());
      } catch(java.io.IOException e) {
         System.out.println(" createNewFile(): "+e);
      }
      System.out.println("f6.mkdir(): "+f6.mkdir());
      //public boolean mkdir(): 이 추상 경로명에 해당하는 디렉토리를 생성합니다.
      System.out.println("f7.mkdir(): "+f7.mkdir());
      String[] s = f0.list();
      //public String[] list(): 추상 경로명이 나타내는 디렉토리 내의 파일과 디렉토리의 이름에 대한 문자열 배열을 얻습니다.
      for(int i=0;i<s.length;i++) {
         System.out.println(" list: "+s[i]);
      }
      System.out.println(" f2.delete(): "+f2.delete());
      //public boolean delete(): 추상 경로명이 가리키는 파일이나 디렉토리를 삭제합니다. 이 때, 비어있지 않은 디렉토리는 삭제할 수 없습니다.
      f3.deleteOnExit();
      //public void deleteOnExit(): 가상 머신이 종료될 때, 이 추상 경로명이 나타내는 파일을 삭제되도록 요청합니다.
      //이 메소드에 의해 파일이 지워지도록 요청되면, 이 요청은 취소될 수 없을므로, 주의를 기울여서 사용해야 합니다.
      System.out.println(" f3.deleteOnExit(): ");
      System.out.println(" f4.renameTo(f5): "+f4.renameTo(f5));
      //public boolean renameTo(File dest): 파일의 이름을 변경합니다.
      System.out.println(" f6.delete(): "+f6.delete());
      //폴더나 파일에 관계없이 모두 delete()메서드를 이용해 삭제한다.
      System.out.println(" f2.exists(): "+f2.exists());
      System.out.println(" f3.exists(): "+f3.exists());
      System.out.println(" f4.exists(): "+f4.exists());
      System.out.println(" f5.exists(): "+f5.exists());
      System.out.println(" f6.exists(): "+f6.exists());
      System.out.println(" f7.exists(): "+f7.exists());
   }
  
   /*
    * Results:
    D:\AIIT\JAVA\07>java FileTest > FileTest.txt
    D:\AIIT\JAVA\07>dir >> FileTest.txt
    D:\AIIT\JAVA\07>type FileTest.txt
             f0.getPath(): .
             f1.getPath(): Test.dat
             f2.getPath(): Test2.dat
             f3.getPath(): Test3.dat
             f4.getPath(): D:\AIIT\JAVA\07\.\Test4.dat
             f5.getPath(): D:\AIIT\JAVA\07\.\Test5.dat
             f6.getPath(): newdir
             f7.getPath(): newdir2
   f1.getAbsolutePath(): D:\AIIT\JAVA\07\Test.dat
    f1.getCanonicalPath(): D:\AIIT\JAVA\07\Test.dat
    f4.getCanonicalPath(): D:\AIIT\JAVA\07\Test4.dat
           f1.getName(): Test.dat
           f1.getParent(): null
            f1.getPath(): Test.dat
            f1.toString(): Test.dat
             f1.toURL(): file:/D:/AIIT/JAVA/07/Test.dat
            f1.canRead(): true
            f1.canWrite(): true
          f1.isAbsolute(): false
         f1.isDirectory(): false
              f1.isFile(): true
            f1.isHidden(): false
        f1.lastModified(): 938796170000
              f1.length(): 823
         f1.compareTo(t2): -4
              f1.exists(): true
              f2.exists(): false
              f3.exists(): false
              f4.exists(): false
              f5.exists(): false
              f6.exists(): false
              f7.exists(): false
       f2.createNewFile(): true
       f3.createNewFile(): true
       f4.createNewFile(): true
               f6.mkdir(): true
               f7.mkdir(): true
                     list: Test.java
                     list: Test.dat
                     list: FileTest.java
                     list: FileTest.class
                     list: FileTest.txt
                     list: Test2.dat
                     list: Test3.dat
                     list: Test4.dat
                     list: newdir
                     list: newdir2
              f2.delete(): true
        f3.deleteOnExit(): 
          f4.renameTo(f5): true
              f6.delete(): true
              f2.exists(): false
              f3.exists(): true
              f4.exists(): false
              f5.exists(): true
              f6.exists(): false
              f7.exists(): true
     드라이브 D   이름 R&D        
     볼륨 일련 번호 1606-1F74
     디렉터리 D:\AIIT\JAVA\07 
    .              <DIR>        99-10-01  20:56 .
    ..             <DIR>        99-10-01  20:56 ..
    TEST~1   JAV           630  99-09-18  16:06 Test.java
    TEST     DAT           823  99-10-02   1:42 Test.dat
    FILETE~1 JAV         7,053  99-10-02   2:45 FileTest.java
    FILETE~1 CLA         4,487  99-10-02   2:45 FileTest.class
    FILETEST TXT         1,883  99-10-02   2:46 FileTest.txt
    TEST5    DAT             0  99-10-02   2:46 Test5.dat
    NEWDIR2        <DIR>        99-10-02   2:46 newdir2
             6개 파일               14,876 바이트
             3개 디렉터리      213,090,304 바이트 사용 가능
    D:\AIIT\JAVA\07>
    */
}


이 소스는 JAVA STUDY의 박용우님의 강좌에 나와있던 소스에, 강좌내용에 나와있던 내용들을 개인적으로 보기 편하게 주석으로 붙인 것입니다.

덧글

댓글 입력 영역

애드센스336x280

알라딘TTB-Egloos(하단-일반)



이 이글루를 링크한 사람 (블랙)

36