본문 바로가기

   
Programming/Java

14일차!

반응형
IO 스트림 / 파일 입출력
학생성적 정보가 온다는 가정
TXT
1,남수,100,100,100
2,길동,50,40,60
3,순신,40,100,20
어떤 데이타인지 구분이 헷갈린다.
국어점수인지 영어점수인지 어떻게 구분할거야? 텍스트 단점이다.

XML
데이타를 주고 받을때 사용
태그를 사용 데이터의 양이 커진다는 단점 텍스트 통신할때 가장 많이 사용
무겁지만 정확한 정보를 알수 있다.
DOM -> SAX가 굉장히 빠르다.
<scores>
     <score>
          <number>1</number>
          <name>남수</name>
JSON
JSON

JSON은 두개의 구조를 기본으로 두고 있다:

  • name/value 형태의 쌍으로 collection 타입. 다양한 언어들에서, 이는 object, record, struct(구조체), dictionary, hash table, 키가 있는 list, 또는 연상배열로서 실현 되었다.
  • 값들의 순서화된 리스트. 대부분의 언어들에서, 이는 array, vector, list, 또는 sequence로서 실현 되었다

InputStream -> 1byte
Reader -> 1char
ReadLine -> 1줄씩 읽어옴

throws Exception -> 네트웍 정보가 끊어질수도 있다. 네트워크가 끊어지면 실제 발생됨

src/io/buffered/memo.txt
111,hong,30,40,50
222,kim,50,60,60
333,kang,60,70,80

src/io/buffered/memo2.txt
학교종이 땡땡땡,
어서 모여라,
선생님이 우리를,
기다리신다
package io.buffered;

import java.io.BufferedReader;
import java.io.FileReader;

public class BufferedReaderDemo {
     
     public static void main(String[] args) throws Exception{
           FileReader fr = new FileReader("src/io/buffered/memo.txt" );//1차스트림 : 파일에 직접연결
           BufferedReader br = new BufferedReader( fr); //2차스트림
           
           String text = null;
           
            while(( text= br.readLine()) != null){
                System. out.println( text);  
           }
            //readLine 줄바꿈을 만날때까지 읽어들인다.
            //BufferedReader = text를 읽을때만 while문을 써서 처리한다.
           
          System. out.println( "_____________________________________" );

                BufferedReader reader = new BufferedReader( new FileReader("src/io/buffered/memo2.txt" ));
                
                 //조각문자열을 담을StringBuilder를 생성
                StringBuilder sb = new StringBuilder();
                String text2 = null;            
                 while(( text2 = reader.readLine()) != null){
                      sb.append( text2);
                }
                
                String wholeText = sb.toString();
                System. out.println( wholeText);
                
                 reader.close();
                
            br.close();
//결과_________________________________________       
//         111, hong,30,40,50
//         222, kim,50,60,60
//         333, kang,60,70,80
//         _____________________________________
//         학교종이 땡땡땡,어서 모여라,선생님이 우리를,기다리신다
           
     }
     
}

memo3.txt
아이유
아이짱
김정희
김민종
SES
우왕앙
아이구
미스에이
아이돌
전혜빈
클라라
현아


package io.buffered;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;

public class BufferedReaderDemo3 {
     
     public static void main(String[] args) throws Exception{
           
            //아씨성만 찾아라
           ArrayList<String> names = new ArrayList<String>();
           
           BufferedReader b = new BufferedReader( new FileReader("src/io/buffered/memo3.txt" ));
           
           String text = null;
            while(( text= b.readLine()) != null){
                 if( text.startsWith( "아")){
                      names.add( text);
                     System. out.println( names);
                }
           }
           
            b.close();
/**결과화면_______________
 * [아이유]
[아이유, 아이짱]
[아이유, 아이짱, 아이구]
[아이유, 아이짱, 아이구, 아이돌]
 */
     }

}


package io.buffered;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;

public class BufferedReaderDemo4 {
     public static void main(String[] args) throws Exception{
           String path = "https://www.google.co.kr/maps/search/tcp+ip+%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98/@37.5651,126.98955,11z/data=!3m1!4b1" ;
           
           URL url = new URL( path);
           
           InputStream is = url.openStream(); //한바이트씩 읽을수 있는 통로가 생김       
           InputStreamReader isr = new InputStreamReader( is, "utf-8");//브릿지
           BufferedReader br = new BufferedReader( isr); //한라인씩 가져올래
           
           String text = null;
            while(( text = br.readLine()) != null){
                System. out.println( text);
           }
           
           
     }
}
결과화면을 html을 리턴해줌.


package io.buffered;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;

import org.apache.commons.io.CopyUtils;

public class ImageDownloader {

     public static void main(String[] args) throws Exception{
           String path = "http://rv.wkcdn.net/http://rigvedawiki.net/r1/pds/_ec_96_b4_eb_b2_a4_ec_a0_b8_ec_8a_a4_3a_20_ec_97_90_ec_9d_b4_ec_a7_80_20_ec_98_a4_eb_b8_8c_20_ec_9a_b8_ed_8a_b8_eb_a1_a0/aou2.jpg" ;
           
           URL url = new URL( path);
           InputStream is = url.openStream();
           FileOutputStream fos = new FileOutputStream("c:/java_study/a.jpg" );
           
            CopyUtils.copy(is fos);
     }
     
}


Exception
package exception;

public class ExceptionDemo3 {
     
      public static void main(String[] args){
            try{
                 int[] numbers = {1,4,7};
                System. out.println( numbers[10]);
           } catch(Exception e){
                System. out.println( e.getMessage() + " 왜적었어?");
                 e.printStackTrace(); //jvm은 발생한 익센션이 이메소드를 실행하고 디버그 및 고칠수 있게 해준다.
                
                String localMsg = e .getLocalizedMessage();
                System. out.println( localMsg );
           }
     }
     
}


package exception;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class ExceptionDemo4 {

      public static void method1() throws HTAException{
            try{
                FileReader reader = new FileReader("src/exception/ExceptionDemo4.java" );
           } catch(FileNotFoundException e){
                 //코드에서 발생한 FileNotFoundException를 가로챈다
                 //대신 HTAException를 생성해서 던진다.
                 throw new HTAException( "파일을 찾을수 없습니다." );
           }
     }
     
      public static void method2() throws HTAException{
            try{
                Class. forName( "exception.ExceptionDemo.java");  
           } catch(ClassNotFoundException e){
                 throw new HTAException( "클래스를 찾을수 없습니다.");
           }
           
     }
     
      public static void method3() throws HTAException{
            try{
                String str = "2012-12-01";
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd" );
                 sdf.parse( str);
           } catch (ParseException e) {
                 // TODO: handle exception
                 throw new HTAException(1, "데이타 형태가 잘못됐어~");
           }
     }
     
      public static void main(String[] args){         
            try{
                 method1();
                 method2();
                 method3();
           } catch(HTAException e){
                System. out.println( "에러메세지 : " + e.getMessage());
           }
     }
     
}


package exception;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class ExceptionDemo4 {

      public static void method1() throws HTAException{
            try{
                FileReader reader = new FileReader("src/exception/ExceptionDemo4.java" );
           } catch(FileNotFoundException e){
                 //코드에서 발생한 FileNotFoundException를 가로챈다
                 //대신 HTAException를 생성해서 던진다.
                 throw new HTAException( "파일을 찾을수 없습니다." );
           }
     }
     
      public static void method2() throws HTAException{
            try{
                Class. forName( "exception.ExceptionDemo.java");  
           } catch(ClassNotFoundException e){
                 throw new HTAException( "클래스를 찾을수 없습니다.");
           }
           
     }
     
      public static void method3() throws HTAException{
            try{
                String str = "2012-12-01";
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd" );
                 sdf.parse( str);
           } catch (ParseException e) {
                 // TODO: handle exception
                 throw new HTAException(1, "데이타 형태가 잘못됐어~");
           }
     }
     
      public static void main(String[] args){         
            try{
                 method1();
                 method2();
                 method3();
           } catch(HTAException e){
                System. out.println( "에러메세지 : " e.getMessage());
           }
            //에러메세지 : 클래스를 찾을수 없습니다.
     }
     
}


package exception;

public class HTAException extends Exception{
      private int errorCode;
     
      public HTAException(String message){
            //부모안에 메시지 값을 담는다.
            super( message);
     }

      public HTAException( int errorCode, String message ){
            super( message );
            this. errorCode = errorCode;
     }
     
      public HTAException( int errorCode, String message, Throwable t){
            super( message);
            this. errorCode = errorCode;
     }
     
      public int getErrorCode() {
            return errorCode;
     }
      //모든 익셉션을 한곳에 모아서 처리할수 있다.
}



FileReader r = null;
try{

     //FileReader r = new FileReader("a.txt");
     while(r.read() != -1){
          //100번째줄 실행할때 오류가 발생
     }
          //에러가나면 바로 catch로 간다. 그러므로 r.close(); 를 열어놓고 닫질 못한다.
//     r.close();

} catch(){

} finally{
     //점유했던 자원과의 연결을 해제하는 코드(대부분 close)
     if(r != null){
          r.close();
     }
}
//만약 db를 계속 열고 닫지않고 작업을 하면 db서버를 껐다 키지 않는한 오류 해결할수 없다.


package exception;

import java.io.FileReader;
import java.io.IOException;

public class ExceptionDemo5 {

      public static void main(String[] args){
           
            /*
            * JAVA SE 7의 auto close가능
            * try(스트림관련 객체 생성){
            * }catch(예외클래스 변수명){
            * }
            *
            * -finally를 쓸 필요가 없이 오토클로즈가 된다.
            */
           FileReader r = null;
           
            try{
                 r = new FileReader("src/exception/ExceptionDemo5.java" );
                 int value = 0;
                 while(( value = r.read()) != -1){
                     System. out.println( value);
                }
                
           } catch(Exception e){
                 if( r != null){
                      try {
                            r.close();
                     } catch (IOException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                     }
                }
           }
     }
     
}



메인메소드안에서만  buffereReader로 파일 

ERP, EIS 를 찾아봐라.

숙제

data.txt

학번, 이름, 학점, 이수학점

1, 아이유, 3.4, 21

10개정도 data생성

평균학점 계산(인터넷으로 찾아보자..)


출력

학번 이름  총점 이수학점 평균

110 아이유 18.2   3.0    

반응형