[JAVA+국비교육] 입출력 Stream
by 무작정 개발반응형
2022.01.12(17일 차)
오늘은 Stream에 대해 배웠다. 정확히는 입출력 Stream이다. 자바의 정석의 챕터를 보면 Stream이 2개인 것을 알 수 있는데, 두 Stream이 같은 용어를 쓰지만 다른 개념이라고 나와있다.
오늘의 수업 내용
입출력 Stream(스트림)의 종류
Java.io 패키지에는 여러 가지 종류의 스트림 클래스를 제공하고 있는데 스트림 클래스는 크게 두 종류로 구분됨.
(byte) 바이트 기반 스트림
- InputStream - 입력 스트림
- OutputStream - 출력 스트림
(character) 문자 기반 스트림
- Reader - 입력 스트림
- Writer - 출력 스트림
입출력 Stream
종류가 다양하게 데이터 입출력 시 모든 데이터를 형태와 관계없이 일련 된 흐름으로 전송하는 것 ( 파이프라인 개념)
javapackage 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 - 파일을 찾아서 읽는 스트림
javapackage 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 - 파일을 생성할 때 사용하는 스트림
javapackage 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 } } }
파일 복사하기
javaackage 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 클래스
javapackage 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("파일복사 실패!!"); } } }
javapackage 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()); } }
반응형
블로그의 정보
무작정 개발
무작정 개발