[자바] 입력과 출력 : 파일(File) 입출력

2 분 소요

RandomAccessFile 클래스

  • 앞서 살펴본 다양한 입출력 스트림을 이용하면 파일에 순차적으로 입출력 작업을 수행할 수 있다.
  • 하지만, 순차적 접근이 아닌 임의의 지점에 접근하여 작업을 수행하고 싶다면, RandomAccessFile 클래스를 사용하면 된다.
    • RandomAccessFile 클래스는 파일만을 대상으로 하며, 임의의 지점에서 입출력을 동시에 수행할 수 있다.
    • 생성자에는 인수파일의 이름뿐만 아니라 파일 모드까지 함께 전달해야 한다.
      • 💡 파일 모드파일의 사용 용도를 나타내는 문자열로, 자바에서 사용할 수 있는 대표적인 파일 모드는 다음과 같다.

        파일 모드 설명
        “r” 파일을 오로지 읽는 것만 가능한 모드로 개방
        “rw” 파일을 읽고 쓰는 것이 모두 가능한 모드로 개방. 만약 파일이 없으면 새로운 파일을 생성
    • getFilePointer() 메소드를 사용하면 파일 포인터의 현재 위치를 확인할 수 있다.
    • 또한, seek() 메소드를 사용하면 파일 포인터의 위치를 변경할 수도 있다.
    public static void main(String[] args) {
      try {
        // "rw" 모드로 "data.txt" 파일을 개방
        RandomAccessFile file = new RandomAccessFile("data.txt", "rw");
    
        System.out.println(file.getFilePointer()); // 0: 파일 포인터의 현재 위치를 반환
          
        file.writeInt(10); // 정수 10을 저장(4 Byte)
        System.out.println(file.getFilePointer()); // 4
    
        file.seek(20); // 파일 포인터의 위치를 20으로 이동
        System.out.println(file.getFilePointer()); // 20
    
      } catch (IOException e) {
        e.printStackTrace();
      }
    }//--main()
    

File 클래스

  • 입출력 스트림을 사용하면 파일을 통한 입출력 작업을 수행할 수 있다.
  • 하지만, 파일의 제거나 디렉터리에 관한 작업 등은 입출력 스트림을 통해서는 수행할 수 없다.

  • 자바는 입출력 작업 외의 파일디렉터리에 관한 작업을 File 클래스를 통해 처리하도록 하고 있으며, 이를 위해 File 클래스에 정의되어 있는 메소드는 다음과 같다.

    메소드 설명
    boolean canRead() 해당 파일이 읽을 수 있는 파일인지 검사
    boolean canWrite() 해당 파일이 쓸 수 있는 파일인지 검사
    boolean delete() 해당 파일 또는 디렉터리를 삭제
    boolean exists() 해당 파일이 존재하는지 검사
    String getPath() 해당 파일의 경로명을 문자열로 반환
    boolean isAbsolute() 해당 파일의 경로명이 절대 경로인지 검사
    boolean isDirectory() 해당 파일이 디렉터리(폴더)인지 검사
    boolean isFile() 해당 파일이 파일인지 검사
    long length() 해당 파일의 크기를 반환
    boolean mkdir() 지정된 경로에 디렉터리를 생성
    boolean mkdirs() 지정된 경로에 디렉터리를 생성하며, 필요한 모든 상위 디렉터리도 생성
    boolean renameTo(File dest) 해당 파일의 이름을 전달된 파일 이름으로 변경
    boolean setExecutable(boolean executable)
    boolean setReadable(boolean readable)
    boolean setWritable(boolean writable)
    boolean setReadOnly()
    해당 파일의 속성을 변경
    • 절대 경로(Absolute Path)
      • 정적인 문자열로 특정 컴퓨터의 파일 위치를 가리키는 경로
      • ex) /home/usr/ubuntu/workspace/mypage/env/templates/mypage.html
    • 상대 경로(Relative Path)
      • 현재 디렉토리(비교 대상)를 기준으로 작성된 경로
      • ex) mypage.html
    public static void main(String[] args){
      File dir = new File("D:\\data");       // 디렉터리 생성
      File file = new File(dir, "data.txt"); // 파일 생성
    
      if(!file.exists()) {                   // 파일이 생성되었는지 확인
          System.out.println("파일이 존재하지 않습니다.");
          System.exit(0); // 프로그램 강제 종료
      }
    
      System.out.println(file.getPath());    // D:\data\data.txt
      System.out.println(file.length());     // 파일의 크기를 반환 -> 0
    }
    

출처

태그:

카테고리:

업데이트: