Scanner/File

개굴이·2023년 9월 4일
0

Java

목록 보기
5/7
post-thumbnail

Scanner

java.util.Scanner
다양한 데이터 유형을 입력 받고 파싱하는 데 사용. 콘솔 입력을 읽어오거나 파일 입력 처리

Scanner 주요 기능

  • 콘솔 입력 처리 :
    Scanner를 사용하여 사용자로부터 콘솔에서 데이터를 읽을 수 있다.
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
String str = scanner.next();
  • 파일 입력 처리 :
    Scanner를 사용하여 파일에서 데이터를 읽을 수 있다.
try {
	File file = new File("data.txt");
	Scanner scanner = new Scanner(file);

	while (scanner.hasNextLine()) {
		String line = scanner.nextLine();
	}

	scanner.close();
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	}
  • 구분자 지정 :
    useDelimiter() 메서드를 사용하여 원하는 구분자를 지정
Scanner scanner = new Scanner("apple,banana,orange").useDelimiter(",");
while (scanner.hasNext()) {
    String fruit = scanner.next();
}

File

주요 메서드

  • 생성자 :

    • File(String pathname) : 지정된 경로명에 있는 파일 또는 디렉터리를 나타내는 File 객체를 생성
    • File(String parent, String child) : 지정된 부모 경로와 자식 경로를 결합하여 파일 또는 디렉터리를 나타내는 File 객체를 생성
    • File(File parent, String child) : 지정된 부모 File 객체와 자식 경로를 결합하여 파일 또는 디렉터리를 나타내는 File 객체를 생성

  • 파일 및 디렉터리 조작 :

    • boolean createNewFile(): 파일을 생성
    • boolean delete(): 파일 또는 디렉터리를 삭제
    • boolean mkdir(): 디렉터리를 생성
    • boolean mkdirs(): 디렉터리와 그 부모 디렉터리를 모두 생성
    • boolean renameTo(File dest): 파일 또는 디렉터리의 이름을 변경
    • boolean exists(): 파일 또는 디렉터리가 존재하는지 확인

  • 정보 조회 :

    • boolean isFile(): 파일인지 여부를 확인
    • boolean isDirectory(): 디렉터리인지 여부를 확인
    • boolean isHidden(): 숨겨진 파일 또는 디렉터리인지 여부를 확인
    • long length(): 파일의 크기를 바이트 단위로 반환
    • String getName(): 파일 또는 디렉터리의 이름을 반환
    • String getPath(): 파일 또는 디렉터리의 경로를 반환
    • String getAbsolutePath(): 파일 또는 디렉터리의 절대 경로를 반환
    • long lastModified(): 파일 또는 디렉터리의 마지막 수정 시간을 반환

  • 목록 조회 :

    • String[] list(): 디렉터리 내의 파일 및 하위 디렉터리 이름 목록을 문자열 배열로 반환
    • File[] listFiles(): 디렉터리 내의 파일 및 하위 디렉터리를 File 객체 배열로 반환

  • 부모 및 경로 관리 :

    • File getParentFile(): 부모 디렉터리를 나타내는 File 객체를 반환
    • String getParent(): 부모 디렉터리의 경로를 문자열로 반환

  • 기타 메서드 :

    • boolean canRead(): 파일을 읽을 수 있는지 여부를 확인
    • boolean canWrite(): 파일에 쓸 수 있는지 여부를 확인
    • boolean setReadOnly(): 파일을 읽기 전용으로 설정

FileReader

  • FileReader 클래스는 문자열 파일을 읽는 데 사용된다.
    텍스트 파일을 문자 단위로 읽어서 문자열로 처리.
  • 주로 문자 데이터를 읽을 때 사용하며, read() 메서드를 통해 파일로부터 문자를 읽을 수 있다.
  • FileReader는 파일에 대한 입력 스트림을 생성한다.
try (FileReader reader = new FileReader("input.txt")) {
    int data;
    while ((data = reader.read()) != -1) {//null이면 -1반환
        char character = (char) data;//char 데이터타입 변환
    }
} catch (FileNotFoundException fnfe) {
	// ...
} catch (IOException e) {
	// ...
}

*IOException 은 FileNotFoundException보다 상위 클래스이므로 catch문에서 더 아래에 위치해야
FileNotFoundException 참고자료
"EUC-KR" 인코딩 방식 읽기

public static void main(String args[]) {
		try (FileInputStream fis = new FileInputStream("c:/iotest/output_ansi.txt");
				InputStreamReader isr = new InputStreamReader(fis, "EUC-KR")) {
			int data;
			System.out.println(isr.getEncoding());
			while (true) {
				data = isr.read();
				if (data == -1)
					break;
				System.out.print((char) data);
			}
		} catch (FileNotFoundException fnfe) {
			System.out.println("파일이 존재하지 않습니다.");
		} catch (IOException ioe) {
			System.out.println("파일을 읽을 수 없습니다.");
		}
}

FileWriter

  • FileWriter 클래스는 문자열 파일을 생성하거나 문자열을 기존 파일에 쓰는 데 사용된다.
  • 텍스트 파일을 문자열로 쓸 때 주로 사용하며, write() 메서드를 통해 문자열을 파일에 쓸 수 있다.
  • FileWriter는 파일에 대한 출력 스트림을 생성한다.
try (FileWriter writer = new FileWriter("output.txt")) {
    String text = "Hello, FileWriter!";
    writer.write(text);
} catch (IOException e) {
    e.printStackTrace();
}

FileWriter vs PrintWriter

  • FileWriter
    FileWriter는 문자 단위로 파일을 쓸 때 사용된다.
    문자열을 파일에 직접 쓸 수 있으며, 문자열을 문자로 변환한 다음 파일에 저장한다.
    기본적으로 파일에 덮어쓰기(overwrite)를 수행하며, 두 번째 매개변수로 true를 전달하면 기존 파일에 내용을 추가할 수 있다.
try (FileWriter writer = new FileWriter("output.txt")) {
    String text = "Hello, FileWriter!";
    writer.write(text);
} catch (IOException e) {
    e.printStackTrace();
}
  • PrintWriter
    PrintWriter도 문자 단위로 파일을 쓸 때 사용되지만, 보다 편리한 출력 방식을 제공한다.
    print() 및 println() 메서드를 사용하여 문자열, 숫자 등 다양한 데이터 유형을 파일에 쓸 수 있다.
    PrintWriter는 기본적으로 파일에 내용을 추가한다.
try (PrintWriter writer = new PrintWriter("output.txt")) {
    String text = "Hello, PrintWriter!";
    writer.println(text);
    writer.println(100);//FileWriter는 char(d), PrintWriter는 int값(100)이 출력
} catch (IOException e) {
    e.printStackTrace();
}

주로 텍스트 파일에 데이터를 기록할 때 PrintWriter가 더 편리하며, 다양한 데이터 유형을 출력하기 위해 사용된다. FileWriter는 단순한 문자열을 파일에 쓸 때 사용된다.

예외 처리시 참조

try-with-resources는 자바 7부터 도입된 기능으로, 리소스(예: 파일, 소켓, 데이터베이스 연결)를 사용한 후에 자동으로 리소스를 닫아준다.
기본 구문 :

try (리소스 초기화) {
    // 리소스를 사용하는 코드
} catch (예외 클래스 변수명) {
    // 예외 처리 코드
}

여기서 "리소스 초기화" 부분에 리소스 객체를 초기화하는 코드를 작성하며, 이 리소스는 AutoCloseable 인터페이스를 구현해야 한다. 리소스 사용이 끝나면 자동으로 close() 메서드가 호출된다.

ex) 파일을 읽는 작업

try (BufferedReader reader = new BufferedReader(new FileReader("파일경로"))) {//자동으로 close
    String line;
    while ((line = reader.readLine()) != null) {
        // 파일 내용을 읽는 코드
    }
} catch (IOException e) {
    // 파일 읽기 중 예외 처리
}

위 코드에서 BufferedReader는 AutoCloseable을 구현하고 있으므로 try-with-resources를 사용하여 파일을 자동으로 닫아준다.

절대 경로/상대 경로

절대 경로 (Absolute Path)

절대 경로는 파일 또는 디렉터리의 위치를 최상위 디렉터리(루트 디렉터리)부터 전체 경로로 표시한다.
주로 다음과 같다 :
윈도우 : C:\Users\Username\Documents\file.txt
리눅스 또는 macOS : /home/username/documents/file.txt
절대 경로는 어떤 위치에서든 파일 또는 디렉터리를 정확하게 지정한다.

상대 경로 (Relative Path)

상대 경로는 파일 또는 디렉터리의 위치를 현재 작업 디렉터리를 기준으로 표시한다.
상대 경로는 현재 위치에서 목표 파일 또는 디렉터리까지의 상대적인 위치를 나타낸다.
상대 경로는 일반적으로 . (현재 디렉터리)와 .. (상위 디렉터리)를 사용하여 지정한다.
예를 들어, 현재 디렉터리에서 상위 디렉터리로 이동한 후에 파일을 찾으려면 ../file.txt와 같은 상대 경로를 사용할 수 있다.

상대 경로는 주로 현재 작업 디렉터리와 관련이 있으며, 이 디렉터리가 변경될 때 상대 경로도 함께 변경될 수 있다. 절대 경로는 항상 특정 위치를 나타내므로 파일 또는 디렉터리의 이동에 영향을 받지 않는다.

출처 openAI

0개의 댓글