실행환경 |
Desktop | 조립식 |
CPU |
Intel(R) Core(TM) i7-3770 3.50GHz |
Memory | 4 GB |
OS | Window 7 Professional 32bit |
Java | 1.7.0_51 |
WebServer | Apache Tomcat 7.0 |
DB | MySQL 5.6.15 |
읽기, 쓰기작업을 처리하는 FileReader, FileWriter에 효율을 향상시켜주는 BufferedReader, BufferedWriter 클래스를 연쇄시켜 사용한다. 버퍼는 자신이 가득 찰 때까지 기다리다가 꽉찬 후에 작업이 진행한다.
[JAVA] java.io.File 클래스
쓰는 방법(출력)
BufferedWriter w = new BufferedWriter(new FileWriter(new File("FileTest.txt"))); |
버퍼가 가득차기전에 데이터를 보내고자 한다면 writer.flush() 호출한다.
읽는 방법(입력)
읽기작업은 while()문에서 한번에 한 행씩 읽어오며, readLine()에서 null을 리턴하면 반복문을 종료한다.
가장 흔하게 쓰이는 방법
import java.io.*;
public class FileTest {
public static void main(String[] args) {
String fDir = "TestDir/";
String fName1 = "FileTest.txt";
File f;
try {
// File 객체 생성(존재하는 파일)
f = new File(fDir + fName1);
// 파일 쓰기(주석부분은 간략화)
FileWriter fileWriter = new FileWriter(f);
BufferedWriter writer = new BufferedWriter(fileWriter);
//BufferedWriter writer = new BufferedWriter(new FileWriter(f));
writer.write("witerTest1");
writer.append("\n"); // 개행문자 삽입
writer.append("witerTest2");
writer.newLine(); // 개행 메서드
writer.write("witerTest3");
writer.close(); // 파일 닫기
// 파일 읽기
FileReader fileReader = new FileReader(f);
BufferedReader reader = new BufferedReader(fileReader);
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close(); // 파일 닫기
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
사진. 구글 검색(Head First Java)
직렬화할 객체
Serializable 인터페이스를 꼭 구현해야한다.
class TestSerialization implements Serializable {
private int x;
private String str;
TestSerialization(int a) { this.x = a; }
TestSerialization(String s) { this.str = s; }
int getA() { return x; }
String getS() { return str; }
}
파일 저장하기(출력)
public class FileTest {
public static void main(String[] args) {
String fDir = "TestDir/";
String fName = "FileTest.ser";
FileOutputStream fileStream;
ObjectOutputStream objStream = null;
// 저장할 객체
TestSerialization test1 = new TestSerialization("ObjectTest1");
TestSerialization test2 = new TestSerialization(100);
TestSerialization test3 = new TestSerialization("ObjectTest3");
try {
// 파일에 연결하기위해 생성, 파일명의 파일이 없으면 새로 만들어줌.
fileStream = new FileOutputStream(fDir + fName);
objStream = new ObjectOutputStream(fileStream);
// 출력되는 객체는 반드시 Serialization 인터페이스 구현
objStream.writeObject(test1);
objStream.writeObject(test2);
objStream.writeObject(test3);
System.out.println("end");
} catch (Exception ex) {
System.err.println("Exception : " + ex.getMessage());
} finally {
try {
objStream.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
}
파일 불러오기(입력) : 역직렬화(객체 복구)
public class FileTest {
public static void main(String[] args) {
String fDir = "TestDir/";
String fName = "FileTest.ser";
FileInputStream fileStream;
ObjectInputStream objStream = null;
try {
// 역직렬화할 파일을 불러온다.
fileStream = new FileInputStream(fDir + fName);
objStream = new ObjectInputStream(fileStream);
// 처음에 저장된 순서대로 가져온다.
Object one = objStream.readObject();
Object two = objStream.readObject();
Object three = objStream.readObject();
// 역직렬화할 객체
TestSerialization test1 = (TestSerialization) one;
TestSerialization test2 = (TestSerialization) two;
TestSerialization test3 = (TestSerialization) three;
} catch (Exception ex) {
System.err.println("Exception : " + ex.getMessage());
} finally {
try {
objStream.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
}