入力と出力

5388 ワード


ストリーム(stream)

  • プログラムでは、I/Oターゲットがあれば、入出力可能です.
    このとき,データが行き交う道路をストリーム(stream)と呼ぶ.
  • I/O基本クラス


  • InputStream, OutputStream

  • I/O用の基本クラス.1 Byte単位でデータを転送する基本クラスです

  • プログラムにオブジェクトを入力するときにInputStreamを使用します.

  • 出力先はプログラム出力時にOutputStreamを使用します.
  • InputStream、OutputStreamの階層構造


  • InputStreamのサブクラス
  • FileInputStream
  • DataInputStream
  • BufferedInputStream

  • OutputStreamのサブクラス
  • FileOutputStream
  • DataOutputStream
  • BufferedOutputStream
  • FileInputStream, FileOutputStream


    ファイル内のデータの読み取り/書き込みに使用されるクラス
    オブジェクトの書式設定
    ファイルオブジェクト名=new FileInputStream(「取得するファイルパス」)
    ファイルオブジェクト名=new FileOutputStream("出力するファイルパス");//ファイルがない場合は、新しいファイルを作成して新しいファイルに出力します.

    FileInputStreamのメソッド-読み込み

  • read();//ファイルから
  • バイトを読み込む
  • read(byte[ ]);//ファイルから
  • を読み込みます(配列サイズ[])
    // 파일에 "Hello Java" 라고 저장되어 있다고 가정하자.
    
    // CASE1
    data1 = inputstream.read(); // 1바이트 단위로 파일에서 읽어옴
    print(data1); // "H" 출력
    
    
    // CASE2
    byte[] bs2 = new byte[3];
    
    data2 = inputstream.read(bs2); // 3바이트 단위로 읽어옴
    print(data2) "Hel" 출력

    FileOutputStreamのメソッド-write


  • write(byte[ ] b);//すべて書き込み:ファイルに出力するコンテンツを配列ごとにグループ化し、一括して書き込みます.

  • write( byte[ ] , int off , int len );//off(始点)、len(長さ)-アレイの始点offからファイルの特定の長さlenに出力
  • // CASE1
    String data2 = "Hello Java";
    byte[] arr = data1.getBytes();
    
    outputstream.write(arr); // "Hello Java" 를 파일에 쓴다
    
    // CASE2
    String data2 = "MY World Java";
    byte[] arr = data2.getBytes();
    
    outputstream.write(arr,1,5); // "Y Wor" 을 파일에 쓴다
    例-read()メソッドで1バイト読み出し
    InputStream inputstream  = null;
    try{
      inputStream = new FileInputStream("C:\\java\\pjt_ex\\hello.txt");
      int data = 0;
      
      while(true){
        try{
          data = inputStream.read(); // 1바이트씩 계속 읽어옴
          
        }catch(IOException e){ // 더이상 파일에서 읽어올게 없는데 
                              // 읽어오려고 하면 애러가 발생 하므로
        
          e.printStackTrace(); // 애러 매시지 출력함
        }
        // 파일에 끝에는 -1 이 담겨져 있음
        if (data == -1) break; // 파일의 끝이라면 while 문을 break한다
        System.out.println("data:" + data);
      }
      
    } catch (FileNotFoundException e) { // 해당하는 파일이 없으면
      
       e.printStackTrace(); // 애러 매시지 출력함
    } finally{
          try{
              // 파일 스트림 객체는 마지막에 close() 로 종료시켜 줘야함
              if(inputStream != null) inputstream.close(); 
          } catch(IOException e) {
            e.printStackTrace();
          }
    }
    例-読み込み()メソッド指定した配列サイズ単位で読み込み
    InputStream inputstream  = null;
    try{
      inputStream = new FileInputStream("C:\\java\\pjt_ex\\hello.txt");
      int data = 0;
      byte[] bs = new byte[3]; // 3 바이트 배열 단위로 파일에서 묶음으로 읽어오기 위해 선언한 배열
      
      while(true){
        try{
          data = inputStream.read(bs); // 선언한 배열을 read() 의 인자로 넘겨줌.
          // 이제 3바이트 단위로 파일에서 읽어올거임.
          
        }catch(IOException e){
        
          e.printStackTrace(); 
        }
        
        if (data == -1) break; 
        System.out.println("data:" + data);
        
        // 제대로 읽어오는지 출력해봄 
        for (int i=0; i < bs.length; i++){
          System.out.println("bs[" i + "] :" + bs[i]);
        }
      }
      
    } catch (FileNotFoundException e) { 
      
       e.printStackTrace();
    } finally{
          try{
              if(inputStream != null) inputstream.close(); 
          } catch(IOException e) {
            e.printStackTrace();
          }
    }
    例-Output Stream()
    OutputStream outputstream  = null;
    try{
      outputStream = new FileInputStream("C:\\java\\pjt_ex\\hello.txt");
      String data = "Hello java World!";
      byte[] arr = data.getBytes(); // getBytes() : 바이트 단위로 전환
      
      try{
          outputStream.write(arr,0,5); // "Hello" 를 파일에 출력한다. 
          
        }catch(IOException e){
        
          e.printStackTrace(); 
        }   
      } catch (FileNotFoundException e){
        e.printStackTrace();
      
      } finally{
          try{
              if(inputStream != null) inputstream.close(); 
          } catch(IOException e) {
            e.printStackTrace();
          }
    }

    DataInputStream, DataOutputStream


    バイトのI/Oを改善することで、文字列の処理をより容易にすることができます.

  • DataOutputStream
  • javaの各基本データ型には、個別の出力方法
  • がある.

  • DataInputStream
  • ファイルにバイナリ形式で入力バイナリデータから元のタイプ
  • に戻る.
    String str1 = "Hello java world!";
    OutputStream outputStream = null;
    DataOutputStream dataOutputStream = null;
    
    try{
    
    // FileOutputStream 객체인 outputSteam 을 이용해 바이너리 타입으로 데이터를 파일에 출력
      outputStream = new FileOutputStream("C:\\java\\pjt_ex\\hello.txt");
    
    // outputStreem 을 인자로 주어서 바이트 타입을 본래 타입(문자열) 로 변경해서 출력 
      dataOutputStream = new DataOutputStream(outputStream);
      
      dataOutputStream.writeUTF(str); // 
      
      } catch (Exception e) {
        e.printStackTrace();
      } finally {
        try {
          if (dataOutputStream != null) dataOutputStream.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
        try{
          if (outputStream != null) outputStream.close();
        } catch (Exception e) {
          e.printStackTrace();
        }

    BufferedReader, BufferedWriter

  • 文字単位で検索