입출력을 위한 인터페이스와 클래스들
byte단위 입출력클래스는 모두 InputStream과 OutputStream이라는 추상클래스를 상속받아 만들어짐.
InputStream -> 추상클래스
OutPutStream -> 추상클래스
파일로 부터 읽어오기 위한 객체 -> FileInputStream
파일에 쓸수 있게 해주는 객체 -> FileOutputStream
import java.io.*;
public class ByteExam2 {
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
long StartTime = System.currentTimeMillis();
try {
fis = new FileInputStream("src\\Javabasic\\ByteExam1.java");
fos = new FileOutputStream("copy1.txt");
//경로를 따로 저장하지 않으면 현재 디렉토리에 저장된다.
int readData = -1;
while ((readData = fis.read()) != -1) {
fos.write(readData);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
long lastTime = System.currentTimeMillis();
System.out.println(lastTime-StartTime); //14
}
}
import java.io.*;
public class ByteExam1 {
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
long StartTime = System.currentTimeMillis();
try {
fis = new FileInputStream("src\\Javabasic\\byteExam1.java");
fos = new FileOutputStream("copy1.txt");
int readCount;
byte[] readByte = new byte[512];
while ((readCount = fis.read(readByte)) != -1) {
fos.write(readByte);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
long lastTime = System.currentTimeMillis();
System.out.println(lastTime-StartTime); //9
}
}
char단위 입출력 클래스는 클래스 이름이 Reader나 Writer로 끝이 난다.
문자(char)단위 입출력클래스는 모두 Reader와 Writer라는 추상클래스를 상속받아 만들어짐.
char단위 입출력 클래스를 이용해서 키보드로부터 한 줄 입력받아서 콘솔에 출력
System.in - 키보드를 의미 (InputStream)
BufferedReader - 한 줄씩 입력받기 위한 클래스
import java.io.*;
public class CharIOExam1 {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
try {
line = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(line);
}
}
try(
//io객체 선언
){
//io객체 사용
}catch(Exception ex){
ex.printStackTrace();
}
Try-with-resources가 모든 객체의 close()를 호출해주지 않는다.
다양한 타입으로 저장 할 수 있는 DataOutputStream
import java.io.*;
public class ByteExam3 {
public static void main(String[] args) {
DataInputStream in = null;
DataOutputStream out = null;
try {
in = new DataInputStream(new FileInputStream("src\\javabasic\\byteExam3.java"));
out = new DataOutputStream(new FileOutputStream("copy.txt"));
int readCount;
boolean typeBoolean = false;
while((readCount = in.read()) != -1) {
out.writeInt(readCount); // Int -> 4byte
out.writeDouble(readCount); //Double -> 8byte
out.writeBoolean(typeBoolean); //boolean -> 1byte
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
대신 인코딩이 아래처럼 출력된다.
import java.io.*;
public class ByteExam4 {
public static void main(String[] args) {
try(
DataInputStream in = new DataInputStream(new FileInputStream("copy.txt"));
) {
// 순서대로 ByteExam3의 int, boolean, double
//copy.txt에서는 볼 순 없지만 console로 확인할 수 있다.
int i = in.readInt();
Boolean B = in.readBoolean();
Double d = in.readDouble();
System.out.println(i);
System.out.println(B);
System.out.println(d);
}catch(Exception e) {
e.printStackTrace();
}
}
}