본문 바로가기

개발일지/Java + Spring

[Java] File 함수로 파일 탐색 + try-catch 예외처리

자바는 모든 파일을 가지고 실행을 하면 느리기 때문에 유틸리티() 영역에 따로 넣어 놓고 불러서 사용을 한다. 값을 가져올 때는 처음 영역에 import를 한다. 

 


 

<숫자형 파일 읽기>

 

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class MainFile {

	public static void main(String[] args) {
		File file = new File("input.txt");
		try { 
			Scanner sc = new Scanner(file);
			while(sc.hasNextInt()) { 
				System.out.println(sc.nextInt()*100); 
			}
		} catch(FileNotFoundException e) { 
			System.out.println("파일에 문제가 발생했습니다.");
		}

	}

}

 

File file = new File("input.txt"); 

input.txt 라는 파일을 읽어주는 객체이다. 객체니까 new 연산자로 생성을 한다. 

 

 try { 예외가 발생할 수 있는 문장 }
 catch(예외이름A 객체명A ) { A오류 발생 시 실행할 문장 }

예외처리

문제가 일어나지 않을 경우에는 try 부분을 실행한다. 그러나 선언을 해 둔 코드에서 예외(오류)가 발생 했을 때는 아래의 문장을 실행한다. 이러한 명령이 없을 경우 오류가 났을 때 아무것도 실행이 되지 않는데 이렇게 명령을 해두면 오류가 났을 때 문자를 띄운다던지 다른 처리를 할 수 있다.


Scanner sc = new Scanner(file);

위에서 지정한 파일을 읽어 오는 기능을 쓰고 있다. 


while(sc.hasNextInt()){

'객체.hasNextInt()' 읽어 올 자료가 있다면 중괄호 안을 실행하라. 여기서 hasNextInt를 보면 정수형(숫자) 파일이라는 걸 알 수 있다. 여기서 while문을 사용하는 이유는 끝까지 출력할 때까지 무한루프를 타기 때문이다. 


System.out.println(sc.nextInt()*100);

가져 올 자료가 있다면 가져온 값에다가 곱하기 100을 해라. sc.nextInt에서 Int가 숫자형이기 때문에 100을 곱할 수 있는 것이다. 

 

 

catch(FileNotFoundException e) {

catch는 문제가 발생했을 시 무조건 실행되는 문장 부분이다. 

여기서 FileNotFoundException e 이 부분은 파일을 찾을 수 없는 예외를 말하는 상황! 

구조 자체가 다르지만 데이터베이스 할 때도 나오니 기억해두자

 

System.out.println("파일에 문제가 발생했습니다.");


hasNext()

현재 위치에 다음 데이터가 있는지 여부를 묻는다. 결과를 true, false로 갖고 온다. 

Next()

데이터를 갖고 오는 역할을 하고, 결과로 다음데이터를 갖고 온다.


.txt 파일 만드는 방법① - 왼쪽의 Package Explorer 

①New - File 

 

File file = new File("input.txt");

②부른대로 파일명과 확장자 설정을 해야한다. 

 

while(sc.hasNextInt()) { 

③숫자형 파일을 불러오는 거라서 숫자만 써야한다.


System.out.println(sc.nextInt()*100); 

④ 곱하기 100을 해서 출력
}

 


 

 

<문자열>

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class MainFile2 {

	public static void main(String[] args) {
		File file = new File("input2.txt"); 
		try { 
			Scanner sc = new Scanner(file); 
			while(sc.hasNext()) { 
				System.out.println(sc.next()); 
			}
		} catch(FileNotFoundException e) { 
			System.out.println("파일에 문제가 발생했습니다.");
		}

	}

}

이부분

while(sc.hasNext()) { 
System.out.println(sc.next()); 
}

위와 같은 문장이지만 문자열을 받기 때문에 Int가 빠졌다.

 

 


.txt 파일 만드는 방법② - 메모장 

txt파일이니까 메모장으로 만들어도 된다. 

초록선 - 문자열을 불러왔으니까 문자열을 값을 써주면 된다. 영어 한글 모두 가능하고 숫자를 입력해도 문자열로 인식한다. 

빨간선 - input2.txt로 설정했기 때문에 제목과 확장자가 같아야 한다. 

 

② 그대로 출력

 


		try { 
			Scanner sc = new Scanner(file);
			while(sc.hasNextInt()) { 
				System.out.println(sc.nextInt()*100); 
			}

스캐너로 입력 받은 값을 close해주지 않아서 오류가 났던 상황이었는데 try-catch문에서는 아래처럼 try() 괄호 안에 리소스를 넣어줘야 오류가 나지 않는다. 반납하는 코드 없이 사용이 가능!

try(Scanner sc = new Scanner(file)) { 
			while(sc.hasNextInt()) {  
				System.out.println(sc.nextInt()*100); 
			}

이렇게 바뀌었다!!