java.io 패키지
Stream이란?
- Data를 목적지로 input/Output하기 위한 방법이다.
- Stream에 Data를 쓸 수도 있고, 읽을 수도 있다.
- Stream에서 Data를 읽을 경우, 이러한 Stream을 input stream이라고 한다.
Stream의 특징
- Stream은 FIFO구조이다
- Stream은 단방향이다.(자바에서 Stream은 읽기, 쓰기가 동시에 되지 않는다. 따라서 읽기, 쓰기가 동시에 필요하다면, 읽는 Stream과 쓰는 Stream을 하나씩 열어 사용해야 한다.)
- Stream은 지연될 수 있다.(Stream은 넣어진 Data가 처리되기 전까지는 Stream에 사용되는 Thread는 지연상태에 빠진다.)
Reader와 Writer클래스가 가장 기초적인 클래스이다.!
StringReader StringWriter와 비슷해 보인다.
스트림(Stream)은 주고 받는 사람간의 통로(배관)라고 보면됨
딴짓을 하더라도 배관에 넣기만 하면 원하는 곳으로 보낼수 있다.
당연히 스트림이 더 무거움
StringReader StringWriter는 모두 스트림의 개념을 담고 있다.
하지만 웹프로그래밍에서는 따로 스트림을 설정할 필요가 없다.
File class
- System에 있는 file이나 firectory를 추상화한 class이다.
- File class를 이용하면 file의 크기, 생성, 삭제, 변경 및 마지막 수정날짜 등 다양한 정보를 알 수 있는 메소드를 제공하고 있다.
import java.io.*;
import java.util.Scanner;
import java.util.Date;
class FileInfo
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.print("파일 경로 : ");
String path = sc.nextLine();
File file = new File(path);
System.out.println(path + "파일의 상세 정보");
System.out.println("절대경로 : " + file.getAbsolutePath());
System.out.println("생성일 : " + new Date(file.lastModified()));
System.out.println("파일크기 : " + file.length());
System.out.println("읽기속성 : " + file.canRead());
System.out.println("쓰기속성 : " + file.canWrite());
System.out.println("파일경로 : " + file.getParent());
System.out.println("숨김속성 : " + file.isHidden());
}
}
import java.io.File;
class FileInfo
{
public static void main(String[] args)
{
File dir2 = new File("c://");
File [] str = dir2.listFiles();
for (int i=0;i<str.length;i++)
{
if (str[i].isDirectory())
System.out.println("<DIR> " + str[i].getName());
else
System.out.println("<FILE> " + str[i].getName());
}
}
}
Byte Stream
- Byte Stream은 1byte를 input/output 할 수 있는 Stream이다.
- 일반적으로 Byte로 구성된 file, 즉 동영상, 이미지, 음악 file을 처리하기에 적함한 Stream이다.
FileWrite class
import java.io.*;
import java.util.*;
class FileWrite{
public static void main(String[] args)throws Exception {
String file, str;
Date date = new Date();
str = "파일 생성시간\n"+date+"\n";
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
//BufferedReader : 읽을 준비를 하겠다!!
System.out.print("파일 이름을 입력하세요 : ");
file = read.readLine();
System.out.println("저장할 문자열을 입력하세요 : ");
str +=read.readLine();
char [] ch_str = new char[str.length()];
str.getChars(0,str.length(), ch_str , 0);
FileWriter fw = new FileWriter(file);
fw.write(ch_str);
fw.close();
System.out.println(file+" 파일을 성공적으로 저장했습니다.");
}
}
FileRead class
import java.io.*;
class FileRead{
public static void main(String[] args)throws Exception {
int i = 0;
String file;
BufferedReader read =
new BufferedReader(new InputStreamReader(System.in));
System.out.print("읽어올 파일을 입력하세요==");
file = read.readLine();
System.out.println(file+" 문서의 내용==========");
FileReader fr = new FileReader(file);
while((i = fr.read()) != -1){
System.out.print((char)i);
}
fr.close();
}
}
데이터아웃풋스트림(DOS)는 유일하게 1바이트 전송체계이다.
일반적으로 사람이 읽을수 있는 파일들은 2바이트의 전송체게로 되어 있다.
데이터인풋스트림으로 읽어 드려야 한다.
물론 사용순서를 마추어야 한다.
주로 암호화/복호화할 때 사용한다.
하지만 전혀 쓰이지 않는다.....필.요.없.다!
import java.io.*;
import java.util.*;
class DataIntputStreamEx{
public static void main(String[] args) throws Exception{
File tf = new File("d://test.txt");
FileInputStream fis = new FileInputStream(tf);
DataInputStream dis = new DataInputStream(fis);
System.out.println(dis.readBoolean());
System.out.println(dis.readChar());
System.out.println(dis.readShort());
System.out.println(dis.readInt());
System.out.println(dis.readLong());
System.out.println(dis.readFloat());
System.out.println(dis.readDouble());
dis.close();
}
}
import java.io.*;
import java.util.*;
class DataOutputStreamEx{
public static void main(String[] args) throws Exception{
File tf = new File("d://test.txt");
FileOutputStream fos = new FileOutputStream(tf);
DataOutputStream dos = new DataOutputStream(fos);
dos.writeBoolean(true);
dos.writeChar(65);
dos.writeShort(100);
dos.writeInt(100);
dos.writeLong(1000);
dos.writeFloat(6.7f);
dos.writeDouble(10.15);
dos.flush();
System.out.println("testEx.txt에"+dos.size()+ " byte 저장");
dos.close();
}
}