입력 (Input) : 파일 읽기, 이미지 & 동영상 불러오기
출력 (Output) : 파일 쓰기, 이미지 & 동영상 내보내기
데이터가 오고 가는 길인 stream 으로 프로그램과 입/출력 대상을 연결한다
InputStream & OutputStream 은 추상클래스로 추상메소드를 갖고있다
InputStream 으로 프로그램에 입력하고 OutputStream 으로 프로그램에서 출력한다
InputStream 클래스 OutputStream 클래스
- FileInputStream - FileOutputStream
- DataInputStream - DataOutputStream
- BufferedInputStream - BufferedOutputStream
FileInputStream & FileOutputStream
1byte 단위로 데이터를 읽어들인다
input
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class No16_stream_Input {
public static void main(String[] args) {
// read()
/*
InputStream inputStream = null;
try {
inputStream = new FileInputStream("C:\\Users\\1\\HelloWorld.txt");
int data = 0;
while(true) {
try {
data = inputStream.read(); // 1byte단위로 읽어들어오기, 읽을게 없으면 -1이 담긴다
} catch (IOException e) {
e.printStackTrace();
}
if(data == -1) break; // -1이 담기면 빠져나오기
System.out.println("data: "+ data); // 아스키코드로 출력됨
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if(inputStream != null) inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
*/
// read(byte[]) 정한 바이트배열의 크기만큼 묶어서 불러오기때문에 속도 빠름
// 마지막에 바이트배열의 크기보다 부족한 데이터가있으면 data 는 남은 데이터 수, 부족한 데이터는 이전의 데이터를 그대로 가져옴
InputStream inputStream = null;
try {
inputStream = new FileInputStream("C:\\Users\\1\\HelloWorld.txt");
int data =0;
byte[] bytearr = new byte[3]; // 바이트배열 생성
while(true) {
try {
data = inputStream.read(bytearr);
} catch (IOException e) {
e.printStackTrace();
}
if(data == -1) break;
System.out.println("data: "+ data);
for(int i=0; i<bytearr.length; i++) {
System.out.println("bytearr["+i+"] : "+bytearr[i]);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if(inputStream != null) inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
output
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class No16_stream_Output {
public static void main(String[] args) {
/*
//write()
FileOutputStream outputStream = null;
try {
// 기존에 있으면 덮어씌우고, 없으면 새로생성함
outputStream = new FileOutputStream("C:\\Users\\1\\Hellojava.txt");
String data = "Hello java world!!";
byte[] arr = data.getBytes(); // data에서 byte를 get해서 -> arr 배열
try {
outputStream.write(arr); // arr 배열의 byte를 output
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if(outputStream != null) outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
*/
//write(배열, 시작, 길이)
FileOutputStream outputStream = null;
try {
// 기존에 있으면 덮어씌우고, 없으면 새로생성함
outputStream = new FileOutputStream("C:\\Users\\1\\HelloWorld.txt");
String data = "Hello awesome world!!";
byte[] arr = data.getBytes(); // data에서 byte를 get해서 -> arr 배열
try {
outputStream.write(arr, 2, 10); // index2부터 10개
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if(outputStream != null) outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
copy
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class No16_stream_Copy {
public static void main(String[] args) {
InputStream inputS = null;
OutputStream outputS = null;
try {
inputS = new FileInputStream("C:\\Users\\1\\Hellojava.txt"); // 이거를
outputS = new FileOutputStream("C:\\Users\\1\\HellojavaCopy.txt"); // 여기에 => 복사
byte[] arr = new byte[3]; // 3개씩 읽어올것
while(true) {
int len = inputS.read(arr);
if(len == -1) break; // 더이상 읽을 데이터가 없을때까지
outputS.write(arr, 0, len); // 처음부터 3개씩 write
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(inputS != null) {
try {
inputS.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(outputS != null) {
try {
outputS.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
byte 단위보다 문자단위로 input, output, copy 하기 = DataInputStream, DataOutputStream 활용
output
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class No16_stream_DataOutput {
public static void main(String[] args) {
String str = "Hello Java World!@";
OutputStream outputS = null;
DataOutputStream dataOutputS = null;
try {
outputS = new FileOutputStream("C:\\Users\\1\\HelloOutput.txt");
dataOutputS = new DataOutputStream(outputS); // FileoutputStream을 매개변수로 활용한다
dataOutputS.writeUTF(str); // 문자열이니까 UTF로 write
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(dataOutputS != null) dataOutputS.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if(outputS != null) outputS.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
copy
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class No16_stream_DataStreamCopy {
public static void main(String[] args) {
// 파일복사하기(문자단위로)
InputStream inputS = null;
DataInputStream dataInputS = null;
OutputStream outputS = null;
DataOutputStream dataOutputS = null;
try {
inputS = new FileInputStream("C:\\Users\\1\\Hellojava.txt");
dataInputS = new DataInputStream(inputS); // byte단위보다 문자단위로 다루기 위해 업그레이드
String str = dataInputS.readUTF(); // 문자단위로 읽고
outputS = new FileOutputStream("C:\\Users\\1\\HellojavaCopy2.txt");
dataOutputS = new DataOutputStream(outputS);
dataOutputS.writeUTF(str); // 문자단위로 쓴다
} catch (Exception e) {
e.printStackTrace();
} finally {
// EOFException 이유 : UTF로 쓰인 파일만 UTF로 읽어올 수 있기때문 -> writeUTF()로 파일 작성 먼저하고 읽으면 ok
try {
if(inputS != null) inputS.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if(dataInputS != null) dataInputS.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if(outputS != null) outputS.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if(dataOutputS != null) dataOutputS.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
'Java' 카테고리의 다른 글
[Java] 네트워킹 (0) | 2021.08.17 |
---|---|
[Java] 데이터 입출력(2) BufferedReader, BufferedWriter (0) | 2021.08.09 |
[Java] 예외처리 (0) | 2021.08.02 |
[Java] Collections(1)_List 인터페이스 (0) | 2021.08.02 |
[Java] StringBuffer, StringBuilder (0) | 2021.08.01 |