File file = new File("C:/photo/food.jpg);
File file = new File("C:/photo", "food.jpg");
import java.io.File;
public class Main01 {
public static void main(String[] args) {
// 절대경로나 상대경로를 생성자 파라미터로 전달한다.
// 이클립스에서 상대경로를 사용할 경우, 현재 프로젝트가
// 기준이 된다.
File f1 = new File("src/Main01.java");
// 전달된 경로가 파일인지 검사
// --> 존재하지 않는 파일로 검사할 경우 무조건 false
boolean is_file = f1.isFile();
System.out.println("isFile=" + is_file);
// 전달된 경로가 디렉토리인지 검사
// --> 존재하지 않는 디렉토리로 검사할 경우 무조건 false
boolean is_dir = f1.isDirectory();
System.out.println("isDirectory=" + is_dir);
// 전달된 경로가 숨김형태인지 검사
// --> 존재하지 않는 파일로 검사할 경우 무조건 false
boolean is_hidden = f1.isHidden();
System.out.println("isHidden=" + is_hidden);
// 절대경로 값을 추출
String abs = f1.getAbsolutePath();
System.out.println("절대경로: " + abs);
// 생성자에 전달된 파일이나 디렉토리가 물리적으로 존재하는지를 검사
boolean is_exist = f1.exists();
System.out.println("존재여부: " + is_exist);
System.out.println("-------------------------------");
// 디렉토리 정보 객체 생성
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());
// 경로에 따른 디렉토리 생성
f2.mkdirs(); // make directory
System.out.println("-------------------------------");
}
}
<참고> - 메모장의 인코딩형식
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
public class Main02 {
public static void main(String[] args) {
// 저장할 파일의 경로
final String PATH = "./test.txt";
// 파일에 저장할 내용
String write_string = "가나다라마바사nabcdefg";
/** 특정 인코딩 방식 적용 */
// 객체나 배열이 선언과 할당에 대한 블록이 서로 분리되어 있을 경우
// 명시적으로 빈 영역임을 알리기 위하여 null로 초기화
byte[] buffer = null;
try {
buffer = write_string.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
/** 파일 저장 절차 시작 */
// finally 블록에서 인식하기 위해서 선언부를 위로 이동시킨다.
OutputStream out = null;
try {
out = new FileOutputStream(PATH);
// 파일쓰기
out.write(buffer);
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 {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
→ 파일 입출력기능은 대부분의 프로그램들이 필요로 하고 여러곳에서 쓰이기 때문에 helper로 지정하여 필요한 시점에 코드를 재사용 하자.
package study.java.helper;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
public class FileHelper {
// ------ 싱글톤 객체 생성 시작 ------
private static FileHelper current;
public static FileHelper getInstance() {
if (current == null) {
current = new FileHelper();
}
return current;
}
public static void freeInstance() {
// 객체에 null을 대입하면 메모리에서 삭제된다.
current = null;
}
// 기본 생성자를 private으로 은닉하게 되면 new를 통한 객체 생성이 금지된다.
private FileHelper() {
super();
}
// ------ 싱글톤 객체 생성 끝 ------
/**
* 주어진 경로에 data 값을 기록하고 저장한다.
*
* @param filePath - 저장할 파일 경로
* @param data - 저장할 내용을 담은 스트림
* @return boolean - 성공시 true, 실패시 false
*/
public boolean write(String filePath, byte[] data) {
boolean result = false;
/** 파일 저장 절차 시작 */
// finally 블록에서 인식하기 위해서 선언부를 위로 이동시킨다.
OutputStream out = null;
try {
out = new FileOutputStream(filePath);
// 파일쓰기
out.write(data);
System.out.println("[INFO] 파일 저장됨 >> " + filePath);
// 저장에 성공하였으므로, 결과값을 true로 변경
result = true;
} catch (FileNotFoundException e) {
System.out.println("[ERROR] 지정된 경로를 찾을 수 없음. >> " + filePath);
e.printStackTrace();
} catch (IOException e) {
System.out.println("[ERROR] 파일 저장 실패 >> " + filePath);
e.printStackTrace();
} catch (Exception e) {
System.out.println("[ERROR] 알 수 없는 에러 >> " + filePath);
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
/**
* 주어진 경로의 파일을 읽고, 내용을 스트림으로 리턴한다.
*
* @param filePath - 읽어야 할 파일의 경로
* @return 읽혀진 내용
*/
public byte[] read(String filePath) {
byte[] data = null;
/** 파일 읽기 */
InputStream in = null;
try {
in = new FileInputStream(filePath);
// 읽은 내용을 담기 위한 배열은 파일의 용량만큼 사이즈를 할당한다.
// in.available() --> 열고 있는 파일의 크기
data = new byte[in.available()];
// 파일 읽기 - 파라미터로 전달된 배열 안에, 파일의 내용을 담아준다.
in.read(data);
System.out.println("[INFO] 파일 읽기 성공 >> " + filePath);
} catch (FileNotFoundException e) {
System.out.println("[ERROR] 지정된 경로를 찾을 수 없음. >>" + filePath);
e.printStackTrace();
} catch (IOException e) {
System.out.println("[ERROR] 파일 읽기 실패 >> " + filePath);
e.printStackTrace();
} catch (Exception e) {
System.out.println("[ERROR] 알 수 없는 에러 >> " + filePath);
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} // end try~catch~finally
return data;
}
/**
* 파일을 저장한다.
*
* @param filePath - 저장할 파일 경로
* @param content - 저장할 내용
* @param encType - 인코딩 형식
* @return boolean - 성공시 true, 실패시 false
*/
public boolean writeString(String filePath, String content, String encType) {
boolean result = false;
byte[] data = null;
try {
data = content.getBytes(encType);
} catch (UnsupportedEncodingException e) {
System.out.println("[ERROR] 인코딩 지정 에러");
e.printStackTrace();
} catch (Exception e) {
System.out.println("[ERROR] 알 수 없는 에러 >> " + filePath);
e.printStackTrace();
}
result = this.write(filePath, data);
return result;
}
/**
* 파일의 내용을 문자열로 리턴한다.
*
* @param filePath - 읽어야 할 파일의 경로
* @param encType - 인코딩 형식
* @return String - 읽은 내용에 대한 문자열
*/
public String readString(String filePath, String encType) {
String content = null;
byte[] data = this.read(filePath);
// 내용을 문자열로 변환한다.
try {
content = new String(data, encType);
content = content.trim();
} catch (UnsupportedEncodingException e) {
System.out.println("[ERROR] 인코딩 지정 에러");
e.printStackTrace();
} catch (Exception e) {
System.out.println("[ERROR] 알 수 없는 에러 >> filePath");
e.printStackTrace();
}
return content;
}
}
import study.java.helper.FileHelper;
public class Main04 {
public static void main(String[] args) {
String encType = "UTF-8";
String filePath = "myfile.txt";
String content = "안녕하세요. 자바 프로그래밍";
boolean result = FileHelper.getInstance().writeString(
filePath, content, encType);
System.out.println(result);
if (!result) {
System.out.println("파일 저장에 실패했습니다.");
return;
}
String read = FileHelper.getInstance().readString(filePath, encType);
System.out.println(read);
}
}
이 포스트는 itpaper.co.kr에서 제공되는 강의자료를 바탕으로 작성되었습니다.