File
클래스는 파일 또는 폴더에 대한 정보를 제공하는 클래스이다.File
클래스의 객체는 정보를 조회하고자 하는 파일이나 폴더의 경로에 대한 문자열을 생성자 파라미터로 전달하는 형태로 만들 수 있다. ( 이 때 파라미터로 전달되는 경로가 실제로 존재하지 않더라도 File 객체의 생성이 가능하다. )
C:\photo\food.jpg
파일에 대한 객체 생성File file = new File("C:/photo/food.jpg"); File file = new FIle("C:/photo","food.jpg");
- 운영체제간의 호환성 유지
- 경로 문자열을 설정할 때 윈도우기반에서는 역슬래시(
\
)를 사용하지만 이 경우 이스케이프 문자를 사용하여\\
의 형식으로 사용해야 한다.- 가급적 다른 운영체제와의 호환성을 위해 슬래시(
/
)를 사용하는 것이 좋다.
- 작업 디렉토리와 관계없이 절대적인 위치를 의미하는 경로
- 윈도우 예시 :
C:/Windows/System32/drivers/etc/hosts
- 리눅스 예시 :
/etc/httpd/conf/httpd.conf
- 작업 디렉토리를 기준으로 상대적인 위치를 의미하는 경로
- 윈도우 예시 :
../drivers/etc/hosts
- 리눅스 예시 :
./conf/httpd.conf
isFile()
- 전달된 경로가 파일인지 검사한다.
존재하지 않는 파일로 검사할 경우 무조건false
isDirectory()
- 전달된 경로가 디렉토리인지 검사한다.
존재하지 않는 디렉토리로 검사할 경우 무조건false
isHidden()
- 전달된 경로가 숨김 형태인지 검사한다.
존재하지 않는 파일로 검사할 경우 무조건false
getAbsolutePath()
- 절대경로 값을 추출한다.
ex)C:\gb_enh\java\workspace\day11\src\file\Main01.java
exists()
- 전달된 경로가 물리적으로 존재하는지 검사한다.
존재하지 않는 파일로 검사할 경우 무조건false
mkdirs()
- 전달된 경로에 따른 디렉토리를 생성한다.
ex)File f1 = new File("a/b/c/target");
getName()
- 마지막
/
이후 단어를 리턴한다.
ex)f1.getName()
->target
리턴
getParent()
- 처음부터 마지막
/
직전까지 리턴한다.
ex)f1.getParent()
->a\b\c
리턴
문자 인코딩 ( Character Encoding )
- 문자나 기호들의 집합을 컴퓨터에서 저장하거나 통신에 사용할 목적으로 부호화하는 방법
*UTF-8
: 8비트 이진수로 표현하는 방법
스트림 ( Stream )
- 입출력에서
stream
이란 디바이스의 입출력 방식이character
단위이든block
단위이든 관계없이 1바이트씩 연속적으로 전달되는 형태로, 추상화된 상태를 의미한다.- 입출력 장치는 개별적인 특성이 있으므로 읽고 쓰는 단위가 각각 다르지만 스트림은 이러한 일련의 과정을 추상화하여 모든 디바이스를
character
단위로만 사용하도록 한다.
입력/읽기
), OutputStream(출력/저장
)과 관련된 인터페이스를 상속받기 때문에 모두 동일한 메서드를 가지고 있다.
- 출력할 파일의 경로와 이름을
final
로 저장하고, 출력할 내용을 지정한다.
이것을byte
배열로 변환한 내용이 담길 변수는byte[]
로 선언한다.// 저장할 파일의 경로 final String PATH = "./test.txt"; // 파일에 저장할 내용 String write_string = "가나다라마바사abcdefg"; byte[] buffer = null;
출력할 내용 byte
로 변환
- 문자열을 파일로 저장하기 위해서는
byte
배열로 변환해야 한다. 문자열을 byte배열로 변환하기 위해서getBytes()
메서드를 사용하는데, 이 때 변환 과정에서 사용될 인코딩 형식을 지정해 주어야 한다.try { buffer = write_string.getBytes("utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); // getBytes()메서드는 존재하지 않는 인코딩 형식에 대한 지정을 방지하기 위하여 // 예외처리를 강제적으로 요구한다. }
파일 출력
// finally 블록에서 out을 닫아 주기 위해 외부에 선언한다. OutputStream out = null; try { out = new FileOutputStream(PATH); // 파일 쓰기 out.write(buffer); //buffer에 담긴 byte배열을 출력한다. System.out.println("[INFO] 파일 저장 성공 >> " + PATH); } catch (FileNotFoundException e) { System.out.println("[ERROR] 지정된 경로를 찾을 수 없음" + PATH); e.printStackTrace(); } catch (IOException e) { System.out.println("[ERROR] 파일 저장 실패 >> " + PATH); e.printStackTrace(); } catch (Exception e){ System.out.println("[ERROR] 알 수 없는 에러 >> " + PATH); e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } }
- 읽어올 파일의 경로와 이름을
final
로 저장한다. 읽어온 내용이 담겨질 변수는byte[]
, 변환한 내용이 담길 변수는String
으로 생성한다.// 읽을 파일 경로 final String PATH = "./test.txt"; // 읽은 내용이 담겨질 스트림 byte[] data = null; // 읽은 내용이 변환될 문자열 String read_string = null;
- 읽기 도중
byte[]
에avaliable()
을 이용한 사이즈 할당이 이루어진다. 할당 후read()
메소드에 이 배열을 파라미터로 전달한다.// finally 블록에서 in을 닫아 주기 위해 외부에 선언한다. InputStream in = null; try { in = new FileInputStream(PATH); // 읽은 내용을 담기 위한 배열은 파일의 용량만큼 사이즈를 할당한다. // in.available() -> 열고 있는 파일의 크기 data = new byte[in.available()]; // 파일 읽기 - 파라미터로 전달된 배열 안에, 파일의 내용을 담아준다. in.read(data); System.out.println("[INFO] 파일 읽기 성공 >>" + PATH); } catch (FileNotFoundException e) { System.out.println("[ERROR] 지정된 경로를 찾을 수 없습니다. >>" + PATH); e.printStackTrace(); } catch (IOException e) { System.out.println("[ERROR] 파일 읽기 실패 >>" + PATH); e.printStackTrace(); } catch (Exception e) { System.out.println("[ERROR] 알 수 없는 에러 >>" + PATH); e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } }
// data에 읽어온 내용이 담겨 있으면 문자열로 변환하여 출력하는 조건문 if( data != null ) { try { // 문자열을 변환 시에는 저장된 인코딩으로 지정 read_string = new String(data, "utf-8"); System.out.println(read_string); } catch (UnsupportedEncodingException e) { System.out.println("[ERROR] 인코딩 지정 에러"); e.printStackTrace(); } }