JavaSE——IOフロー(一)異常、Fileファイル類

9524 ワード

IOフローの概要
1.概念
IOストリームは、デバイス間のデータ転送、すなわちファイルのアップロードとダウンロードを処理するために使用される.
2.なぜ例外とFileクラスを先に説明するのですか?
(1)FileはIOストリームが将来操作するファイルを表すので、Fileクラス(2)を学ばなければならないが、一般的な操作ファイルはファイルアップロードとファイルダウンロードにほかならない.この操作中に問題が発生する可能性がある.問題が発生した後、対応するコードを処理する必要があるので、異常を学ぶ.
一.異常
1.概要
例外はJavaプログラムの実行中に発生したエラーです.
2.分類
(1)error:メモリオーバーフローなどの重大な問題は、一般的には処理されません.(2)Exception:重大でない問題、解決できる問題.①コンパイル時異常:非RuntimeException②運転時異常:RuntimeException
3.JVMデフォルトで例外を処理する方法
main関数がこの問題を受け取ったとき、2つの処理方法があります.(1)自分でこの問題を処理し、実行を続行します.(2)自分では対応していない処理方法はmainメソッドを呼び出したJVMに任せるしかないが,JVMにはデフォルトの例外処理メカニズムがあり,その例外を処理し,その異常の名前,異常の情報,異常が発生した場所をコンソールに印刷しながらプログラムを停止する.
//1/0  
package com.westmo1.demo7;
public class MyDemo4 {
    public static void main(String[] args) {
        int a=1;
        int b=0;
        System.out.println(a/b);
    }
}
//Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.westmo1.demo7.MyDemo4.main(MyDemo4.java:7)

4.異常処理(try...catch...finally)
(1)基本フォーマットtry{問題が発生する可能性のあるコード;}catch(異常名変数名){問題に対する処理;}finally{リソースを解放する;}
(2)ケーススタディ
package com.westmo1.demo7;
public class MyDemo4 {
    public static void main(String[] args) {
        int a=1,b=0;
        int[] arr={12,12};
        arr=null;
         //  try            ,          ,             ,    ,   ?
        //               ,      ,       ,               。
        try{
            System.out.println(arr.length);
            System.out.println(a/b);
        }catch (ArithmeticException e){
            System.out.println("   0 ");
        }catch (NullPointerException e){
            System.out.println("     ");
        }catch (Exception e){
            System.out.println("    ");
        }
        System.out.println("     ");
    }
}

5.コンパイル期間異常と運転期間異常の違い
(1)概念Javaにおける異常は,コンパイル時異常と実行時異常の2つに分類され,すべてのRuntimeExceptionクラスとそのサブクラスのインスタンスを実行時異常と呼び,その他の異常はコンパイル時異常である.
  • コンパイル時異常:Javaプログラムは処理を表示する必要があります.そうしないと、プログラムにエラーが発生し、コンパイルできません.
  • ランタイム異常:処理を表示する必要はなく、コンパイル時異常と同様に処理できます.(2)ケーススタディ
  • //try...catch  
    package com.westmo1.demo8;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    public class MyDemo1 {
        public static void main(String[] args) {
            String str="2020-12-12";
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy--mm-dd");
            try {
                Date parse = simpleDateFormat.parse(str);
                System.out.println(parse);
            } catch (ParseException e) {
                System.out.print("    ");
            }finally {//      ,    finally    
                System.out.println("    ");
            }
            System.out.println("     ");
        }
    }
    
    //throws    ,                 
    package com.westmo1.demo8;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    public class MyDemo1 {
        public static void main(String[] args) throws ParseException {
            String str = "2020-12-12";
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd");
            Date parse = simpleDateFormat.parse(str);
            System.out.println(parse);
        }
    }
    

    6.異常なベースクラス(Throwableのいくつかの生産のよくある方法)
    getMessage():			      ,     。
    toString():				           ,     。
    printStackTrace():	               ,             。
    

    7.throwとthrowsの違い
    (1)throw概要:機能メソッド内部で何らかの状況が発生し,プログラムが実行できなくなり,ジャンプが必要な場合はthrowで異常オブジェクトを投げ出す.(2)区別
    throws:メソッド宣言の後に、異常クラス名が付いています.複数の異常クラス名とカンマで区切ることができます.それは異常を投げ出すことを表し、異常を呼び出し者に投げつけ、呼び出し者によって処理され、throwsは異常の可能性を表すだけで、必ずしもこれらの異常が発生するとは限らない.
    throw:メソッド内で使用され、例外オブジェクト名が付いています.例外オブジェクト名は1つしかありません.このオブジェクト名はコンパイル期間異常オブジェクトでも実行期間異常オブジェクトでも構いません.その放出される異常はメソッド内の文で処理され,throwを実行すると必ず何らかの異常が放出される.
    package com.westmo1.demo8;
    import java.util.Scanner;
    public class MyDemo5 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("     ");
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            test1(a,b);
        }
        private static void test1(int a, int b) {
            if (b==0) {
                throw new ArithmeticException("   0 ");
            }else{
                System.out.println(a/b);
            }
        }
    }
    

    8.finallyキーワードおよびfinal,finalizeとの違い
    (1)finally:Java保証コードが必ず実行されるメカニズムで、try-catch-finallyを使用して異常を処理する操作を行うことができます.異常を処理する場合、異常が発生したかどうかは関係なく、finallyのコードが実行されます.(2)final:メソッド、クラス、変数を修飾するために使用できます.修飾メソッドこのメソッドは書き換えることができません.修飾クラスこのクラスは継承できません.修飾変数この変数は変更できません.(3)finalize:ベースクラスObjectの1つのメソッドで、オブジェクトがゴミ収集される前に特定のリソース回収を完了することを保証します.しかし、現在は推奨されていません.
    9.カスタム例外
    package com.westmo1.demo8;
    import java.util.Scanner;
    public class MyDemo6 {
        public static void main(String[] args) {
            //        0-100         ,    RuntimeException   
            Scanner scanner = new Scanner(System.in);
            System.out.println("    ");
            int i = scanner.nextInt();
            Score(i);
        }
        private static void Score(int i) {
            if(i>=0&&i<=100){
                System.out.println("    ");
            }else{
                throw new ScoreException("     ");
            }
        }
        //x             Java      
        static  class ScoreException extends RuntimeException{
            public ScoreException(String s) {
                super(s);
            }
            public void ScoreException(String string){
            }
        }
    }
    

    二.Fileクラス
    1.概要
    IOストリームを使用してデータ転送を行う場合、これらのデータは私たちのパソコンでファイルやフォルダの形式で表現されています.Javaでは、ファイルやフォルダを記述するFileクラスが用意されています.
    2.使用
    (1)構造方法
    File(String pathname):        File      
    File(String parent, String child):            /    File  
    File(File parent, String child):     File        /    File  
    

    (2)作成機能
    public boolean createNewFile():                  ,     
    public boolean mkdir():                ,                                    
    public boolean mkdirs():     ,         ,                            
        :          Java     ,   Java      
        :       
    

    (3)削除機能
    public boolean delete():          ,           ,     
    

    (4)名前変更機能
    public boolean renameTo(File dest):              
    

    (5)判断機能
    public boolean isDirectory():	       
    public boolean isFile():	       
    public boolean exists():	      
    public boolean canRead():	      
    public boolean canWrite():	      
    public boolean isHidden():	      
    public boolean isAbsolute();             
    

    (6)取得機能
    public String getAbsolutePath():	      
    public String getPath():		      
    public String getParent()                     ;             ,    null。
    public File getParentFile()                   ;             ,    null。 
    public long getTotalSpace()                 。           
    public long getFreeSpace()                        。           
    public String getName():		    
    public long length():			    。   
    public long lastModified():		           ,   
    public String[] list():			                      
    public File[] listFiles():		                  File   
    

    3.ファイル名フィルタ
    public String[] list(FilenameFilter filter)
    public File[] listFiles(FilenameFilter filter)
    

    3.ケーススタディ
    (1)マルチレベルフォルダの削除
    package com.westmo1.demo10;
    
    import java.io.File;
    public class MyDemo1 {
        public static void main(String[] args) {
            File file = new File("F:\\123");
            Delete(file);
            System.out.println("    ");
        }
        private static void Delete(File file) {
                File[] files = file.listFiles();//  file            File  
                for (File file1 : files) {
                    if (file1.isFile()) {//       
                        file1.delete();
                    }else{
                        Delete(file1);//    ,  
                         }
                 }
            file.delete();
        }
    }
    

    (2)指定されたディレクトリの下に.jpgという接尾辞を持つファイルがあるかどうかを判断し,ある場合はファイル名を出力する.
    ①:Fileクラス実装
    package com.westmo1.demo10;
    import java.io.File;
    public class MyDemo2 {
        public static void main(String[] args) {
            File file = new File("E:\\123");
            Show(file);
        }
        private static void Show(File file) {
            File[] files = file.listFiles();
            for (File file1 : files) {
                if (file1.isFile()){
                    if(file1.getName().endsWith(".jpg")) {
                        System.out.println(file1.getName());
                    }
                }else{
                    Show(file1);
                }
            }
        }
    }
    

    ②ファイルフィルタ実装
    package com.westmo1.demo10;
    import java.io.File;
    import java.io.FilenameFilter;
    public class MyDemo3 {
        public static void main(String[] args) {
            File file = new File("E:\\123");
            File[] files = file.listFiles(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    File file1 = new File(dir, name);
                    if (file1.isFile() && file1.getName().endsWith(".jpg")) {
                        return true;
                    } else {
                        return false;
                    }
                }
            });
            for (File file1 : files) {
                System.out.println(file1.getName());
            }
        }
    }