728x90
    
    
  반응형
    
    
    
  FileInputStream
- InputStream 클래스를 상속받은 자식 클래스, 하드 디스크 상에 있는 파일로부터 바이트 단위의 입력을 받는 클래스다. 출발 지점과 도착 지점을 연결하는 통로(스트림)을 생성한다.
- 생성자의 인자로 File 객체를 주거나 파일명을 직접 String 형태로 줄 수 있다. 일반적으로 파일명을 String 꼴로 주는 경우가 많은데 파일이 존재하지 않을 가능성도 있어 Exception 처리가 필요.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class Test02 {     public static void main(String[] args) {         File file = new File("C:\\0607KIM\\resource\\test3.txt");         // 해당 경로에 위치하는 파일이 존재하지않으면 새로 만들어줌!          // -> FNE을 줄이는데 도움이 된다.          try {             file.createNewFile();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }finally {             System.out.println("로그 : 파일객체생성완료");         }         try {//FileInputStream : 파일을 불러오기 위해서 생성              FileInputStream fis = new FileInputStream(file);             // 둘중에 하나 사용하면됨 / 경로를 쓸경우에는 사전에 파일을 만들 필요가 없다.    //FileInputStream fis = new FileInputStream("C:\\0607KIM\\resource\\test2.txt");             // 해당 파일이 경로에 존재하지 않으면 예외발생              int data; // fis는 숫자로 구성된 데이터이므로 int타입 //무한루프 방지를위해 -1이 아닐때까지만 읽으라고 명령             while ((data=fis.read()) != -1) {                 // 그냥출력하면 아스키 코드로 받아와지기 때문에 char로 형변환                  System.out.print((char)data);              }         } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }      } } | cs | 
FileOutputStream
- OutputStream 클래스를 상속받은 자식 클래스, 파일로 바이트 단위의 출력을 내보내는 클래스.
- Sink 스트림의 일종으로 3개의 생성자가 중복 정의되어 있다.
- FileInputStream의 생성자와 거의 같은 형태인데 하나 더 있는 생성자의 형식은 append 처리를 위한 논리 변수를 인자로 갖고 있다.이 값이 true로 설정되면 기존에 존재하던 파일의 가장 뒷부분에 꼬리물기 식으로 연결해 출력된다.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import java.io.FileNotFoundException; import java.io.FileOutputStream; public class Test03 {     public static void main(String[] args) { // 가독성및 유지보수 위해서 상수화         final String path1="C:\\0607KIM\\resource\\";           final String path2=".txt";         try {             FileOutputStream fos = new FileOutputStream(path1+"test2"+path2,true);             // 해당 경로에 파일이없다면, 새로 생성함!              // 해당 경로에 파일이있다면, 덮어쓰기가됨!              // -> 오버로딩된 생성자를 활용하면 이어쓰기가 가능하다.              fos.write(65); // 아스키코드              fos.flush(); // 버퍼비우기             fos.close(); // 버퍼닫기          } catch (Exception e) { // 파일의 경로를 못찾는 에러              // TODO Auto-generated catch block             e.printStackTrace();         }finally {             System.out.println("fos를 통해서 파일객체 작성완료");         }     } } | cs | 
< 예제 >
문제 : 1234 라고 적혀있는 test1 파일을 읽어서 각자리를 모두 더해서 test2파일에 10을 출력이되도록 만들기
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class Test04 {     public static void main(String[] args) {         final String path1="C:\\0607KIM\\resource\\";         final String path2=".txt";         int sum=0;         try {//test1에 파일 입력              FileInputStream fis=new FileInputStream(path1+"test1"+path2);              int data; //무한루프 방지를위해 -1이 아닐때까지만 읽으라고 명령             while((data=fis.read())!=-1) {                 System.out.println(data);                 // 아스키코드로 출력되니 형변환하여 출력되도록한다.                 char ch=(char)data;                 String str="";                 str+=ch;                 System.out.println(ch);                 int num=Integer.parseInt(str);                 sum+= num;             }         } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }         System.out.println("sum= "+sum);         try {//test2파일에 10작성하기              FileOutputStream fos=new FileOutputStream(path1+"test2"+path2);             //10이라는 문자열을 넣어야하는데              //write()는 두개 이상은 입력이 안되니 1,0 각각 입력해야함              fos.write((char)49); // 문자열1 -> 아스키코드49             fos.write((char)48); // 문자열0 -> 아스키코드48              fos.flush(); // 버퍼비우기             fos.close(); // 버퍼닫기          } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }     } } | cs | 
이미지(jpg) 복사본 생성하기
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class Test05 {     public static void main(String[] args) {         final String path="C:\\0607KIM\\resource\\"; // 원본파일 접근          try {             //원본파일 불러오기              FileInputStream fis=new FileInputStream(path+"photo.jpg");             //복사본 생성              FileOutputStream fos=new FileOutputStream(path+"photo- 복사본.jpg");             //배열의 길이는 넉넉하게 입력              byte[] buff=new byte[1000];             // byte[] 를 인자로 받는 read메서드를 오버로드             int len;             while((len=fis.read(buff)) != -1) {                  //buff공간에서 0데이터를 len만큼 write할게                 fos.write(buff,0,len);             }             fos.flush(); // 버퍼비우기             fos.close(); // 버퍼닫기          } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         } finally {             System.out.println("이미지 파일 복사-붙여넣기 완료");         }     } } | cs | 
728x90
    
    
  반응형
    
    
    
  'JAVA' 카테고리의 다른 글
| [JAVA] MVC 자판기 프로그램 실습 (CRUD 개념) (0) | 2022.06.29 | 
|---|---|
| [JAVA] 시험 오답풀이 (For-each문) (0) | 2022.06.27 | 
| [JAVA] 예외 처리 (try, catch, finally) (0) | 2022.06.27 | 
| [JAVA] 인터페이스 Interface (0) | 2022.06.27 | 
| [JAVA] 추상메소드, 추상클래스 (abstract) (0) | 2022.06.27 | 
 
                  
                