[JAVA+국비교육] 입출력 Stream
by 무작정 개발반응형
2022.01.12(17일 차)
오늘은 Stream에 대해 배웠다. 정확히는 입출력 Stream이다. 자바의 정석의 챕터를 보면 Stream이 2개인 것을 알 수 있는데, 두 Stream이 같은 용어를 쓰지만 다른 개념이라고 나와있다.
오늘의 수업 내용
입출력 Stream(스트림)의 종류
Java.io 패키지에는 여러 가지 종류의 스트림 클래스를 제공하고 있는데 스트림 클래스는 크게 두 종류로 구분됨.
(byte) 바이트 기반 스트림
- InputStream - 입력 스트림
- OutputStream - 출력 스트림
(character) 문자 기반 스트림
- Reader - 입력 스트림
- Writer - 출력 스트림
입출력 Stream
종류가 다양하게 데이터 입출력 시 모든 데이터를 형태와 관계없이 일련 된 흐름으로 전송하는 것 ( 파이프라인 개념)
package com.day16;
import java.io.IOException;
//Stream
//데이터 입출력 시 모든 데이터를 형태와 관계없이 일련된 흐름으로 전송하는 것 - 파이프라인
//in
public class Test1 {
public static void main(String[] args) throws IOException {
int data;
System.out.print("문자 입력 : "); // dfd235
//System.in,read가 자바에서 제공하는 입력 Stream
while((data = System.in.read()) != -1) {// 1바이트 문자 1개를 읽어옴
char ch = (char)data;
System.out.print(ch);
}
}
}
FileInputStream - 파일을 찾아서 읽는 스트림
package com.day16;
import java.io.FileInputStream;
//매우중요
//파일 읽어오기 - FileInputStream - 1바이트씩 쓰고 1바이트씩 읽기
public class Test5 {
public static void main(String[] args) {
try {
//파일을 읽어서 fis에 넣었음
FileInputStream fis = new FileInputStream("c:\\doc\\test.txt");
int data;
//파일에 몇자가 들어간지 모르니 while문으로
while((data = fis.read()) != -1) {
//이렇게하면 파일이 깨짐
//System.out.print((char)data);
//이클립스는 기본적으로 인코딩이 ANSI이다.
System.out.write(data); // 엔터를 기준으로 읽어옴
System.out.flush(); // 안나온 것들 강제로 빼줌
}
fis.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
FileOutputStream - 파일을 생성할 때 사용하는 스트림
package com.day16;
import java.io.FileOutputStream;
//FileOutputStream - 파일을 내보낼 때 쓴다.
public class Test6 {
public static void main(String[] args) {
try {
FileOutputStream fos = new FileOutputStream("c:\\doc\\out1.txt");
int data;
System.out.print("문자열 : "); //abcd
while((data = System.in.read()) != -1) {
fos.write(data);
}
fos.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
파일 복사하기
ackage com.day16;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Scanner;
//파일 복사
//원본 파일? c:\\doc\\test.txt
//대상 파일? c:\\doc\\out2.txt
//복사완료
public class Test7 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int data; //int로 한 이유는 read가 int형으로 받기때문
String file1, file2;
try {
System.out.print("원본 파일?");
file1 = sc.next();
System.out.print("대상 파일?");
file2 = sc.next();
FileInputStream fis = new FileInputStream(file1);
FileOutputStream fos = new FileOutputStream(file2);
//1바이트 씩 읽어내서
while((data = fis.read()) != -1) {
//여기서 읽어오면서 복사되고 데이터가 fos가 들어간다. fos에 데이터가 들어가면 덮어씌어지는데 그게 복사
fos.write(data);//읽어옴
fos.flush();//남은거 강제로 읽고
}
fis.close();
fos.close(); //닫아주고
System.out.print("파일복사완료");
} catch (Exception e) {
// TODO: handle exception
}
}
}
FileInputStream : 파일을 읽어온다
FileOutputStream : 파일을 내보낸다.
File 클래스
package com.day16;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Test8 {
public boolean fileCopy(String str1, String str2) {
//File클래스는 삭제는 가능하나 수정은 불가능
File f = new File(str1);
//if문은 대부분 부정으로
if(!f.exists()) { //경로 찾아가봐서 파일이 없으면 실행하지마
return false;
}
try {
//파일을 받을 때 사용하는 코딩
FileInputStream fis = new FileInputStream(f); //str1
FileOutputStream fos = new FileOutputStream(str2);
//여기부터 - 파일을에 있는 내용을 읽어내고 내용을 수정해서 내보낼때 쓰는 코딩 중요!
int data = 0;
byte[] buffer = new byte[1024];
while((data = fis.read(buffer, 0, 1024)) != -1) { // buffer에서 0번째부터 1024크기까지 읽자.
fos.write(buffer, 0, data); // buffer에서 0부터 data크기만큼 내보내라
}
///여기까지-----------------------------------------
fis.close(); //close를 쓰는 이유는 길어질 때 쓰레기값이 생기니까 닫아준다.
fos.close();
} catch (Exception e) {
// TODO: handle exception
}
return true;
}
public static void main(String[] args) {
Test8 ob = new Test8();
if(ob.fileCopy("c:\\doc\\test.txt", "c:\\doc\\out6.txt")) {
System.out.println("파일복사 성공!!");
} else {
System.out.println("파일복사 실패!!");
}
}
}
package com.day16;
import java.io.File;
import java.io.IOException;
import java.util.Date;
//File 클래스
//파일 및 폴더를 관리할 수 있도록 기능을 제공해주는 클래스
//파일의 복사 또는 이름변경 등의 조작을 할 경우에만 사용될 뿐( 내용 수정만 불가능)
//파일의 내용을 입출력 하기위한 메서드를 제공하지는 않는다.
public class Test12 {
public static void main(String[] args) throws IOException {
File f = new File("c:\\doc\\test.txt");
System.out.println("파일명 : " + f.getName());
System.out.println("파일 길이 : " + f.length());
System.out.println("파일경로 : " + f.getAbsolutePath());
System.out.println("표준경로 : " + f.getCanonicalPath()); //예외처리 해줘야함
System.out.println("만든날 : " + new Date(f.lastModified()));
System.out.println("파일 패스 : " + f.getParent());
System.out.println("읽기속성 : " + f.canRead());
System.out.println("쓰기속성 : " + f.canWrite());
}
}
반응형
'Language > Java' 카테고리의 다른 글
[JAVA+국비교육] Class 클래스, 정규화표현식, 채팅프로그램 만들기 (0) | 2022.01.14 |
---|---|
[JAVA+국비교육] Event (이벤트) (0) | 2022.01.13 |
[JAVA+국비교육] Thread (0) | 2022.01.11 |
[JAVA+국비교육] 예외 처리(Exception), 네이버 로그인 만들기 (0) | 2022.01.10 |
[JAVA+국비교육] ArrayList, List, Map, Generic (0) | 2022.01.07 |
블로그의 정보
무작정 개발
무작정 개발