8.4 IOフローオブジェクト学習1

12804 ワード

IOストリームオブジェクトの簡単な紹介
プログラムの中のデータはすべてメモリの中に存在して、いったんプログラムの運行が終わると、データは失って、データの持続的な記憶javaを解決するためにIOストリームを通じて解決します
Fileクラス
  • オペレーティングシステムにおけるファイル、ディレクトリ(フォルダ)、パスをFileオブジェクトにカプセル化し、さらにシステムにおけるコンテンツを操作する方法を提供する
  • .
    Fileクラス構築方法のリロード
    3つのリロード方法
    1、File(File parent,String child)パスを渡す、Fileタイプの親パスを渡す、文字列のサブパスのメリット:親パスはFileタイプで、親パスはFileクラスメソッド2、File(String parent,String child)パスを直接呼び出すことができ、文字列のサブパスは親パスと子パス3、File(String pathname)パス名を個別に操作する:フォルダに書き込むことができ、ファイルに書き込んでFileタイプオブジェクトをパスでカプセル化できます
    Fileクラスの作成と削除方法
    1、Fileクラスの削除機能boolean delete()削除されたファイルまたはフォルダは、File構築方法で削除に成功したtrueを返し、削除に失敗したfalse 2、File作成フォルダ機能boolean mkdirs()を返します.作成されたパスは、ファイルの作成方法でフォルダがすでに存在していることを示します.3、ファイルの作成機能boolean createNewFile()で作成されたファイルのパスとファイル名は作成されません.ファイルの作成方法では、ファイルがすでに存在し、作成されていません.
    Fileクラスの取得方法
    1、String getName(); リターンパスに表示されるファイルまたはフォルダ名取得パスの最後の部分の名前サブ2、long length()リターンパスに表示されるファイルのバイト数3、String getAbsolutePath()リターンStringオブジェクトFile getAbsoluteFile()リターンFileオブジェクト取得絶対パス4、String getParent()は、StringオブジェクトFile getParentFile()を返します.Fileオブジェクト取得親パス5、File[]listFiles()を返します.File構築メソッドでカプセル化されたパスのファイルとフォルダ名(1つのディレクトリを巡る)は、ディレクトリまたはファイルのフルパス6、String[]list()を返します.Fileコンストラクションメソッドでカプセル化されたパスのファイルとフォルダ名(ディレクトリを巡回)は、名前のみを返します.
    Fileクラスの判断機能
    1、boolean isDirectory(); File構築方法でカプセル化されたパスがフォルダであればtrueを返し、ファイルでなければfalse 2、boolean isFile()を返す.File構築方法でカプセル化されたパスがファイル3、boolean exists()であるか否かを判断する.File構築方法でパッケージパスに戻りtrueが存在するか、戻りfalseが存在しないかを判断する
    ファイルフィルタ
    ディレクトリを巡回する場合は、必要に応じて、条件を満たすファイル巡回ディレクトリメソッドlistFiles()リロード形式のみを取得できます.
  • listFiles(FileFilter)インタフェースタイプ
  • FileFilterインタフェースを渡す実装クラス
  • カスタムFileFilterインタフェース実装クラス、書き換え抽象メソッド、
  • インタフェース実装クラスオブジェクトを遍歴メソッドlistFiles固有コードに渡す:
  • public class FileDemo1 {
        public static void main(String[] args) {
            File file = new File("c:\\demo");
            File[] fileArr = file.listFiles(new MyFilter());
            for(File f : fileArr){
                System.out.println(f);
            }
        }
    }
    

    FileFilerインタフェースには実装クラスがなく、カスタム実装クラスはカスタムフィルタによってFileFilerインタフェースを実現し、抽象メソッドフィルタコードを書き換える.
    public class MyFilter implements FileFilter{
        public boolean accept(File pathname)  {
            /*
             * pathname             
             * c:\\demo\\1.txt
             *        ,   java  ,  true,  java  ,  false
             *         .java
             */
            String name = pathname.getName();
            return name.endsWith(".java");
            
        }
    }
    

    マルチレベルディレクトリを巡り、メソッドを再帰的に実装し、フィルタを追加
    public class FileDemo1 {
        public static void main(String[] args) {
            getAllJava(new File("c:\\demo"));
        }
        /*
         *     ,        
         *         .java  
         */
        public static void getAllJava(File dir){
            //  File    listFiles()  ,     
            File[] fileArr = dir.listFiles(new MyJavaFilter());
            for(File f : fileArr){
                // f  ,        
                if(f.isDirectory()){
                    //         
                    getAllJava(f);
                }else{
                    System.out.println(f);
                }
            }
        }
    }
    

    ファイルにデータを書き込み、ファイルからデータを読み込む
    バイト出力ストリーム
  • のような抽象クラスは、出力バイトストリームのすべてのクラスを表すスーパークラスである.操作されるデータはすべてバイトであり,出力バイトストリームの基本的な共通機能方法を定義する.OutputStreamには多くのサブクラスがあり、サブクラスFileOutputStreamはファイルにデータを書き込むために使用できます.

  • FileOutputStreamクラスをファイルに書き込む
    データファイルの書き込み、親メソッドの学習、サブクラスオブジェクトの使用
    サブクラスの構築方法:役割:出力の出力先パラメータをバインドする:FileパッケージファイルString文字列のファイル名ストリームオブジェクト使用手順1.ストリームサブクラスのオブジェクトを作成し、データの目的2をバインドします.ストリームオブジェクトを呼び出す方法writeは3を書きます.closeリリースリソースフローオブジェクトの構築方法では、ファイルを作成できます.ファイルが存在する場合は、直接上書きします.
    public class FileOutputStreamDemo {
        public static void main(String[] args)throws IOException {
            FileOutputStream fos = new FileOutputStream("c:\\a.txt");
            //      write   
            // 1   
            fos.write(97);
            
            //     
            byte[] bytes = {65,66,67,68};
            fos.write(bytes);
            
            //         ,    ,   
            fos.write(bytes, 1, 2);
            
            //           
            //    
            fos.write("hello".getBytes());
    
            //    
            fos.close();
            
        }
    }
    

    FileOutputStreamファイルの再書き込みと改行の問題
  • 続写:FileOutputStream構築方法、2番目のパラメータにtrue
  • を追加
  • ファイルに改行、改行記号を書き込むr
  • rは、前の行の末尾に書くことも、次の行の先頭
  • に書くこともできます.
    public class FileOutputStreamDemo1 {
        public static void main(String[] args)throws IOException {
            File file = new File("c:\\b.txt");
            FileOutputStream fos = new FileOutputStream(file,true);
            fos.write("hello\r
    ".getBytes()); fos.write("world".getBytes()); fos.close(); } }

    IOストリームの異常処理詳細:1.ストリームオブジェクトの変数を保証し、役割ドメインが十分である.catchでは、異常出力異常の情報をどのように処理するか、目的はどこに問題が発生したのかを見てプログラムを停止し、新しい試みから3.ストリームオブジェクトの確立に失敗した場合、リソースを閉じる必要がありますかnewオブジェクトの場合、失敗し、システムリソースを占有してリソースを解放していない場合、対流オブジェクトはnull変数がnullではないと判断し、オブジェクトの確立に成功し、リソースを閉じる必要があります
    public class FileOutputStreamDemo{
        public static void main(String[] args) {
            //try       ,try       
            FileOutputStream fos = null;
            try{
                fos = new FileOutputStream("s:\\a.txt");
                fos.write(100);
            }catch(IOException ex){
                System.out.println(ex);
                throw new RuntimeException("      ,  ");
            }finally{
                try{
                    if(fos!=null)
                      fos.close();
                }catch(IOException ex){
                    throw new RuntimeException("      ");
                }
            }
        }
    }
    

    バイト入力ストリームInputStream
    構築方法:このストリームオブジェクトにデータソースをバインドする
      : 
      File     
      String   
    

    ストリームがファイルを読み込むステップ1を入力.バイト入力ストリームのサブクラスオブジェクト2を作成する.読み出し方法readの読み出し3を呼び出す.リソースを閉じる
     read()  ,
      read()    ,           
        ,          ,        -1
    
    public class FileInputStreamDemo {
        public static void main(String[] args) throws IOException{
            FileInputStream fis = new FileInputStream("c:\\a.txt");
            //      ,    read   int
            //      ,    ,           read()    -1
            int len = 0;//  read      
        
            while( (len = fis.read()) != -1){
                System.out.print((char)len);
            }
            //    
            fis.close();
        }
    }
    

    2、読み出し方法int read(byte[]b)読み出しバイト配列
  • 配列作用:バッファ作用、効率向上
  • readが返すintは、何個の有効なバイト数
  • まで読み出す.
    public class FileInputStreamDemo {
        public static void main(String[] args) throws IOException {
            FileInputStream fis = new FileInputStream("c:\\a.txt");
            //      
            byte[] b = new byte[1024];
            
            int len = 0 ;
            while( (len = fis.read(b)) !=-1){
                System.out.print(new String(b,0,len));
            }
            fis.close();
        }
    }
    

    文字入力ストリーム
    テキストファイルの読み取り専用
    読み出し方法:read()int read()1文字int read(char[]c)読み出し文字配列
    Readerクラスは抽象クラスで、サブクラスオブジェクトFileReaderを見つけます
    構築方法:データソースパラメータのバインド:Stringファイル名
    public class ReaderDemo {
        public static void main(String[] args) throws IOException{
            FileReader fr = new FileReader("c:\\1.txt");
            /*int len = 0 ;
            while((len = fr.read())!=-1){
                System.out.print((char)len);
            }*/
            char[] ch = new char[1024];
            int len = 0 ;
            while((len = fr.read(ch))!=-1){
                System.out.print(new String(ch,0,len));
            }
            
            fr.close();
        }
    }
    

    文字出力ストリーム
    ファイルを書く
    書き込み方法write write(int c)1文字write(char[]c)書き込み文字配列write(char[]c,int,int)文字配列の一部を書き、インデックスを開始し、いくつかのwrite(String s)書き込み文字列を書きます
    WriterクラスのサブクラスオブジェクトFileWriter
    構築方法:書き込まれたデータのFileタイプオブジェクトStringファイル名
    文字出力ストリームがデータを書くときは、機能を実行し、機能flush()をリフレッシュする必要があります.
    public class WriterDemo {
        public static void main(String[] args) throws IOException{
            FileWriter fw = new FileWriter("c:\\1.txt");
            
            // 1   
            fw.write(100);
            fw.flush();
            
            // 1     
            char[] c = {'a','b','c','d','e'};
            fw.write(c);
            fw.flush();
            
            //        
            fw.write(c, 2, 2);
            fw.flush();
            
            //     
            fw.write("hello");
            fw.flush();
            
            fw.close();
        }
    }
    

    きりかえりゅう
    文字入力ストリーム、テキストファイルの読み込み
             ,        
    
          :
       read()   1   ,      
    
      :  OuputStreamWriter    
    InputStreamReader    
    
    OuputStreamWriter(OuputStream out)       
     InputStreamReader(InputStream in)           
               : FileInputStream
     InputStreamReader(InputStream in,String charsetName)         
    
    public class InputStreamReaderDemo {
        public static void main(String[] args) throws IOException {
    //      readGBK();
            readUTF();
        }
        /*
         *     ,InputSteamReader    
         *    UTF-8   ,    utf
         */
        public static void readUTF()throws IOException{
            //       ,      
            FileInputStream fis = new FileInputStream("c:\\utf.txt");
            //       ,     ,       ,       
            InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
            char[] ch = new char[1024];
            int len = isr.read(ch);
            System.out.println(new String(ch,0,len));
            isr.close();
        }
        /*
         *     ,InputSteamReader    
         *           ,  GBK  
         */
        public static void readGBK()throws IOException{
            //       ,      
            FileInputStream fis = new FileInputStream("c:\\gbk.txt");
            //       ,    ,       
            InputStreamReader isr = new InputStreamReader(fis);
            char[] ch = new char[1024];
            int len = isr.read(ch);
            System.out.println(new String(ch,0,len));
            
            isr.close();
        }
    }
    

    文字出力ストリーム、書き込みテキストファイルwrite()文字、文字配列、文字列

    OutputStreamWriter使用方法構築方法:OutputStreamWriter(OutputStreamWriter)はすべてのバイト出力ストリームを受信しますが、バイト出力ストリーム:FileOutputStream
     OutputStreamWriter(OutputStream out, String charsetName)
     String charsetName         GBK  UTF-8 
       
     OutputStreamWriter     ,  FileWriter
    
    public class OutputStreamWriterDemo {
        public static void main(String[] args)throws IOException {
    //      writeGBK();
            writeUTF();
        }
        /*
         *      OutputStreamWriter   
         *   UTF-8     
         */
        public static void writeUTF()throws IOException{
            //       ,    
            FileOutputStream fos = new FileOutputStream("c:\\utf.txt");
            //       ,           ,       UTF-8
            OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
            osw.write("  ");
            osw.close();
        }
        
        /*
         *       OutputStreamWriter   
         *     GBK     
         */
        public static void writeGBK()throws IOException{
            //       ,      
            FileOutputStream fos = new FileOutputStream("c:\\gbk.txt");
            //       ,    ,       ,  GBK   
            OutputStreamWriter osw = new OutputStreamWriter(fos);
            //      
            osw.write("  ");
            
            osw.close();
        }
    }
    

    バッファフロー
    バイト出力ストリームのバッファストリーム
    java.io.BufferedOutStreamの役割:既存の出力ストリームの書き込み効率を向上させるBufferedOutStreamはOutputStreamメソッドを継承し、writeバイト、バイト配列を書き込む
        :
     BufferedOuputStream(OuputStream out)
                 ,          ,           
    
        public static void main(String[] args)throws IOException {
            //       ,    
            //FileOutputStream fos = new FileOutputStream("c:\\buffer.txt");
            //             ,     ,       
            BufferedOutputStream bos = new
                    BufferedOutputStream(new FileOutputStream("c:\\buffer.txt"));
            
            bos.write(55);
            
            byte[] bytes = "HelloWorld".getBytes();
            
            bos.write(bytes);
            
            bos.write(bytes, 3, 2);
            
            bos.close();
        }
    }
    

    バイト入力ストリームのバッファフロー
    InputStreamを継承し、標準的なバイト入力ストリーム読み出し方法read()単一バイト、バイト配列
    構築方法:BufferedInputStream(InputStream in)は任意のバイト入力ストリームを伝達することができ、誰であるかを伝達することができ、誰の効率を高めて伝達できるバイト入力ストリームFileInputStream
    public class BufferedInputStreamDemo {
        public static void main(String[] args) throws IOException{
            //             ,            ,    
            BufferedInputStream bis = new 
                    BufferedInputStream(new FileInputStream("c:\\buffer.txt"));
            byte[] bytes = new byte[10];
            int len = 0 ;
            while((len = bis.read(bytes))!=-1){
                System.out.print(new String(bytes,0,len));
            }
            bis.close();
        }
    }