Java 파일 입출력에 대한 이해

박현우·2024년 1월 9일

1. 파일 입출력
1-1. File 클래스

  • File 클래스 파일 또는 폴더에 대한 정보를 제공하는 클래스이다.

  • File 클래스의 객체는 정보를 조회하고자 하는 파일이나 폴더의 경로에 대한 문자열을 생성자 파라미터로 전달하는 형태로 만들 수 있다.

  • 이 때 파라미터로 전달되는 경로가 실제로 존재하지 않더라도 File 객체의 생성이 가능하다.

    	File file = new File("경로");
    	File file = new File("C:/photo/food.jpg");
    	File file = new File("C:/photo", "food.jpg");

1-2. 경로 설정하기

  • 운영체제간의 호환성 유지를 위한 '/'의 사용
    -> C:/Users/KITCOOP/Desktop/ZoomIt
    -> 경로 문자열을 설정할 때 윈도우기반에서는 역슬래시()를 사용하지만, 이 경우, 이스케이프 문자를 사용하여 '\'의 형식으로 사용해야 하고, 가급적 다른 운영체제와의 호환성을 위해서 슬래시(/)를 사용하는 것이 좋다.

  • 절대경로
    -> 작업 디렉토리와 관계없이 절대적인 위치를 의미하는 경로
    -> 윈도우 예시: C:Windows/System32/drivers/etc/hosts
    -> 리눅스 예시: /etc/httpd/conf/httpd.cof

  • 상대경로
    -> 작업 디렉토리를 기준으로 상대적인 위치를 의미하는 경로
    -> 같은 디렉토리: 파일명, ./파일명
    ex) data.txt, ./data.txt // 동일한 경로
    -> 상위 디렉토리: ../파일명
    ex) ../data.txt
    -> 하위 디렉토리: 디렉토리명/파일명, ./디렉토리명/파일명
    ex) dir/data.txt, ./dir/data.txt
    -> 윈도우: ../driver/etc/hosts
    -> 리눅스: ../conf/httpd.conf

      		public static void main(String[] args) {
      
      
    		// 이클립스에서 상대경로를 사용할 경우,
      		// 현재 프로젝트가 기준이 된다.
      		// 절대경로나 or 상대경로를 생성자 파라미터로 전달
      		File f1 = new File("src/file/Main01.java");
      
    		// 전달된 경로가 파일인지 검사
    		// -> 존재하지 않는 파일로 검사할 경우, 무조건 false
    		boolean is_file = f1.isFile();
    		System.out.println("isFile : " + is_file);
    		-> isFile : true
      
    		// 전달된 경로가 디렉토리인지 검사
    		// -> 존재하지 않는 디렉토리로 검사할 경우 무조건 false
    		boolean is_dir = f1.isDirectory();
    		System.out.println("isDirectory = " + is_dir);
    		-> isDirectory = false
      
    		// 전달된 경로가 숨김 형태인지 검사
    		// -> 존재하지 않는 파일로 검사할 경우 무조건 false
    		boolean is_hidden = f1.isHidden();
    		System.out.println("isHidden = " + is_hidden);
     		-> isHidden = false
    	
    		// 절대경로 값을 추출
    		String abs = f1.getAbsolutePath();
    		System.out.println("절대경로 = " + abs);
     		-> 절대경로 = D:\gb_phw_1218\java\workspace\day14\src\file\Main01.java
    	
    		// 생성자에 전달된 파일이나 디렉토리가 물리적으로 존재하는지를 검사
    		boolean is_exist = f1.exists();
    		System.out.println("존재여부 : " + is_exist);
      		-> 존재여부 : true
    	
    		// 디렉토리 정보 객체 생성
    		File f2 = new File("a/b/c/target");
    		System.out.println("isFile : " + f2.isFile());
    		System.out.println("isDirectory : " + f2.isDirectory());
    		System.out.println("isHidden : " + f2.isHidden());
    		System.out.println("절대경로 : " + f2.getAbsolutePath());
    		System.out.println("존재여부 : " + f2.exists());
      		-> 
            isFile : false
    		isDirectory : false
    		isHidden : false
    		절대경로 : D:\gb_phw_1218\java\workspace\day14\a\b\c\target
    		존재여부 : false
    	
    		// 경로에 따른 디렉토리 생성
    		// 새로고침
    		f2.mkdirs();
    		System.out.println("---------------");
    	
    		// 마지막 "/" 이후 단어를 리턴
    		System.out.println(f1.getName());
    		System.out.println(f2.getName());
    		-> Main01.java
      		-> target
              
    		// 처음부터 마지막 "/" 직전까지 리턴
    		System.out.println(f1.getParent());
    		System.out.println(f2.getParent());
    		-> src\file
      		-> a\b\c
      
    		System.out.println("----------------");
    		// 삭제 시도 -> 성공시 true, 실패시 false
    		boolean del_ok = f2.delete();
    		System.out.println("삭제성공여부 : " + del_ok);
    	
    	
    	
    	
    		}

0개의 댓글