java에는 데이터 입력, 출력과 관련하여 다음과 같은 추상클래스가 정의되어 있습니다.
[주의점]
실무에서 파일이나 소켓 통신으로 타 기관과 데이터를 송수신하여 처리하는 경우에, 데이터 레이아웃을 정의할때 각 필드 길이가 문자 단위인지 byte 단위인지 명확히 해야합니다.
예를 들어, 정보 제공처에서는 "주소"라는 필드에 50byte를 할당하고, 수신처에서는 "주소" 필드를 길이 50의 문자열로 자르게 된다면 전혀 다른 형태로 데이터 변환이 일어나게 됩니다.
OutputStream과 Writer의 구현 클래스로 한줄씩 파일에 출력하고, InputStream과 Read로 파일 읽기
public class DataIoTest {
public static void main(String[] args){
DataIoTest dataIoTest = new DataIoTest();
String filename="fileoutputtest.txt";
dataIoTest.fileOutputStreamTest(filename);
dataIoTest.fileWriterTest(filename);
dataIoTest.fileInputStreamTest(filename);
dataIoTest.fileReadTest(filename);
}
public void fileOutputStreamTest(String filename){
String data="this is output Stream test";
byte[] bytes = data.getBytes(); // getBytes()를 호출하면 내부적으로 String을 바이너리 형식으로 인코딩함
try (OutputStream out = new FileOutputStream(filename)) {
out.write(bytes);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void fileWriterTest(String filename){
String data="this is writer test";
try(Writer fileWriter=new FileWriter(filename,true)){
try(BufferedWriter bufferedWriter = new BufferedWriter(fileWriter)){
bufferedWriter.newLine();
bufferedWriter.write(data);
}
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void fileInputStreamTest(String filename){
try(InputStream in = new FileInputStream(filename)) {
byte[] bytes = in.readAllBytes(); // 바이너리 데이터를 그대로 읽어서
String data = new String(bytes,Charset.defaultCharset()); // 두번째 파라미터로 인코딩 형식을 지정할 수 있음
System.out.println("inputstream : "+data);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void fileReadTest(String filename){
try (Reader fileReader=new FileReader(filename)){
try(BufferedReader br = new BufferedReader(fileReader)){
String line=null;
while((line=br.readLine())!=null){
System.out.println("Reader : "+line);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
[output]
inputstream : this is output Stream test
this is writer test
Reader : this is output Stream test
Reader : this is writer test
[참고]