Daily coding

Java Basic : day 7 - File : 파일 입출력 본문

Language/Java_basic

Java Basic : day 7 - File : 파일 입출력

sunnnkim 2019. 11. 26. 19:27

 File : 파일 입출력

  - logic 부분 : 직접 구현하는 부분 (DAO, DTO ...), 사용자가 직접 코드 짜야함  
  - 기능 부분 : upload, file... , 외운다기 보다는 이해한 후에 코드 불러와서 사용하는 것이 좋다.

    => File
 

 


 window 파일
  - *.lib : library, 정적 파일 - 메모리에 저장되어 꺼내서 사용, 보안 강함 
  - *.dll : dynamic link library, 동적파일 - 필요할 때마다 그떄그때 읽음, 가볍지만 해킹에 취약
  - *.jar : Java의 라이브러리 파일
  - 텍스트 파일 (*.txt) : 모든 파일의 기본 
 


 저장매체(데이터 저장) :

- File / Database(궁극적으로는 file, file을 프로그래밍화한 것) 
 
 - 이름      나이      주소
 - 홍길동    26      서울시 -> parsing 가능
 
 - parsing : 원하는 데이터를 취합해서 가져오는 것 (row별로)
 - parser -> 데이터를 파싱하는 프로그램
 
 


 
 파일(database) 입출력의 목적 : 

 - 데이터 관리, 저장, 유지
   * CRUD : 
 - 추가(Create), 삭제(Delete), 읽기(Read), 쓰기(Write)
 - 검색(Search, Select), 수정(Update)
 
 ** 제일 큰 목적은 읽기 / 쓰기 (가장 중요)
 
 
 */

// AWT ? 
// 게시판 만들것임 (MVC구조로 만들고 Spring가면 더 잘 할 수 있음)
// Spring -> MVC 구조 

//=================================================



파일 목록보기(검색)

 

1-1. file.list(); 

   : 해당 디렉토리에 존재하는 파일명을 모두 불러오는 String 배열  

File fdir = new File("c:\\");

// 위의 코드는 파일 데이터타입의 fdir을 생성하고, 파일의 주소 포인터를 초기화한다.


String filelist[] = fdir.list();         <-- fdir 의 주소에 있는 파일 리스트를 스트링 배열에 저장한다.
for (int i = 0; i < filelist.length; i++) {  // 파일목록 출력 
       System.out.println(filelist[i]);
 }

파일 리스트에는 있으나 실제 폴더에 존재하지 않는 파일은 숨겨진 파일도 다 출력해서 보여준다.

 

1-2. fdir.listFiles()

     : 해당 디렉토리에 존재하는 폴더명을 모두 불러오는 String 배열    

 

 

 

2. fdir.isFile();

   : 파일인지 확인해주는 메소드 

 

3. filelist[i].isDirectory()

   : 폴더인지 확인해주는 메소드


File filelist[] = fdir.listFiles();
for (int i = 0; i < filelist.length; i++) {
           if(filelist[i].isFile()) {
                     System.out.println("[파일]" + filelist[i].getName());
                      // 파일인지 확인한 후 파일명 출력  
           }
           else if(filelist[i].isDirectory()) {
                      //폴더인지 확인하고 폴더이름 출력
                      System.out.println("[폴더]" + filelist[i].getName());
           } else {
                      System.out.println("[?]" + filelist[i].getName());
           }
}

 


파일 생성하기

 

String fileStr = "d:\\tmp\\newFile.txt";
File newFile = new File(fileStr); // <--- 주소가 담긴 스트링을 넣어주거나 

File newFile = new File( "d:\\tmp\\newFile.txt" ); // <--- 직접 " " 에 집어 넣어도 됨

          // 위의 코드는 파일 포인터만 생성해주는 코드, 디렉토리에 가보면 없음
          // 직접 파일은 만드는 코드는  
          // newFile.createNewFile();  

          // 위의 코드는 예외처리가 필요한 코드이며 
          // boolean이라 조건을 걸어주어야 함

 
try {
          if(newFile.createNewFile()) {
                    System.out.println("파일 생성 성공 ");

                    // 한번만 실행하면 성공
          }else {
                    System.out.println("파일 생성 실패");

                    // 다시 한번 실행하면 실패로 뜬다. 이미 같은이름으로 만들어 졌기 때문
          }
} catch (IOException e) {
          e.printStackTrace();
}


폴더 생성방법

 

String dirStr = "d:\\tmp\\sub";
// 역슬래쉬 2개(\\) 대신 슬래쉬 1개 (/)로도 대체 가능하다 

File newDir = new File(dirStr);
         
if(newDir.mkdir()) {
         System.out.println("newDir.mkdir() 디렉토리 생성 성공");

         //한번만 실행면 성공
}else {
         System.out.println("newDir.mkdir() 디렉토리 생성 실패");

         // 다시 한번 실행하면 실패로 뜬다.
}


// 아래 코드는 폴더 생성이 안된다.
// tmp1이 생성되어 있지 않았기 때문 
String dirStr1 = "d:\\tmp1\\sub";
File newDir1 = new File(dirStr1);

if(newDir1.mkdir()) {
         System.out.println("newDir1.mkdir() 디렉토리 생성 성공"); 
}else {
         System.out.println("newDir1.mkdir() 디렉토리 생성 실패"); // 출력됨 
}

 


 tmp1이라는 폴더와 그 안에 sub폴더를 모두 생성하고 싶으면
 newDir.mkdirs();
 위의 메소드를 사용해야한다.

if(newDir1.mkdirs()) {
         System.out.println("newDir1.mkdirs() 디렉토리 생성 성공"); //한번만 실행면 성공
}else {
         System.out.println("newDir1.mkdirs() 디렉토리 생성 실패"); // 다시 한번 실행하면 실패로 뜬다.
}


String filename = "newfile1" + ".txt";
File myfile = new File(dirStr+ "\\" +filename);
try {
         if(myfile.createNewFile()) {
                  System.out.println("myfile.createNewFile() 생성 성공"); //한번만 실행면 성공
         }else {
                  System.out.println("myfile.createNewFile() 생성 실패"); // 다시 한번 실행하면 실패로 뜬다.
         }
} catch (Exception e) {
 
}

파일 존재 여부 확인 : .exists()


if(myfile.exists()) {
         System.out.println("파일이 존재합니다.");
}else {
         System.out.println("파일이 존재하지 않습니다.");
}

 

 


파일 삭제 : .delete();


if(myfile.delete()) {
         System.out.println("myfile 파일을 삭제했습니다.");
 }else {
         System.out.println("myfile 파일을 삭제하지 못했습니다.");
 }

 


읽기만 가능한 파일 만들기 : setReadOnly()

myfile.setReadOnly();

 

파일 읽기가능 여부  : canRead()


if(myfile.canRead()) {
         System.out.println("myfile 파일 읽기가 가능합니다.");  //출력됨 
}
else {
         System.out.println("myfile 파일 읽기가 불가능합니다.");
}

 


파일 쓰기 가능 여부 : canWrite()



if(myfile.canWrite()) {
         System.out.println("myfile 파일 쓰기가 가능합니다.");
}
else {
         System.out.println("myfile 파일 쓰기가 불가능합니다."); // 출력 됨
}




}
}