Javaの基本(3)| IOは、Fileクラスの正しい姿勢を使用してストリーム

ファイル

終了面接の準備のために、我々は今日のJavaベースのレビューに入るようになりました。私はこの記事を読んで良い基盤の学生は、ジェネリックを把握することができると思いますが、優秀な学生の基礎を検討する権利は、私がこの記事を読んだ後ご希望の場合、あなたは少しセンチメンタル思い出を再生することができます。

まず、Fileクラスは何ですか?

java.io.Fileクラスは抽象ファイルとディレクトリのパス名は、主にファイルやディレクトリ、見つけて削除ファイルを作成するために使用される、示しています。

第二には、Fileクラスを使用します

2.1コンストラクタ

3クラスコンフィギュレーションファイルがあります。

  • public File(String pathname)直接の文字列は、ファイルパスが作成しました
  • public File(String parent, String child)文字列のパスは、親と子が作成しました
  • public File(File parent, String child)サブパスを作成するために組み合わせる、親ファイル・オブジェクトを作成します。
/**
 * Project Name:review_java <br/>
 * Package Name:com.nasus.io.file <br/>
 * Date:2020/1/3 22:22 <br/>
 *
 * @author <a href="[email protected]">chenzy</a><br/>
 */
public class FileConstruct {

    public static void  main(String [] args) {
        // 文件路径名
        String pathname = "Z:\\file\\file.txt";
        File file1 = new File(pathname);
        System.out.println(file1);

        // 通过父路径和子路径字符串
        String parent = "Z:\\file";
        String child1 = "file.txt";
        File file2 = new File(parent, child1);
        System.out.println(file2);

        // 通过父级 File 对象和子路径字符串
        File parentDir = new File("Z:\\file");
        String child2 = "file.txt";
        File file3 = new File(parentDir, child2);
        System.out.println(file3);
    }

}
复制代码

:上に示したFileオブジェクトのメソッドを作成するための3つの方法が、さらには、ことに留意すべきであるハードドライブのディレクトリやファイル、ディレクトリやファイルは、オブジェクトが表すファイルでハードディスクに作成されたFileオブジェクトの存在には影響を与えません。

取得機能の2.2方法

  • public String getAbsolutePath() :絶対パスファイルのインスタンスを返します。

  • public String getPath() :指定された抽象パス名のファイルのインスタンスは、パス名文字列に変換され、

  • public String getName() 戻り値:ファイルのインスタンスディレクトリやファイル名

  • public long length() 戻り値:ファイルのインスタンスファイルの長さ

ハードディスクZで:\ファイルの下で、file.txtのファイルを作成し、ファイルの内容が26通の英語の手紙です。

/**
 * Project Name:review_java <br/>
 * Package Name:com.nasus.io.file <br/>
 * Date:2020/1/4 11:01 <br/>
 *
 * @author <a href="[email protected]">chenzy</a><br/>
 */
public class FileGet {

    public static void main(String[] args) {

        File file1 = new File("Z:"+ File.separator + "file" + File.separator + "file.txt");
        System.out.println("文件绝对路径:"+file1.getAbsolutePath());
        System.out.println("文件构造路径:"+file1.getPath());
        System.out.println("文件名称:"+file1.getName());
        System.out.println("文件长度:"+file1.length()+"字节");

        System.out.println("----------------------");

        // 表示根目录,  在 windows 下:File.separator + "file" = "\\file"
        File file2 = new File(File.separator + "file");
        // 绝对路径
        System.out.println("目录绝对路径:"+file2.getAbsolutePath());
        // 构造 File 实例时的路径
        System.out.println("目录构造路径:"+file2.getPath());
        System.out.println("目录名称:"+file2.getName());
        // file 示例为目录,所以长度 = 0
        System.out.println("目录长度:"+file2.length());
    }

}
复制代码

ファイルのgetメソッドは、上記例示し、それは価値があることが指摘されている:差分ある、getPath()とgetAbsolutePath()前者は、絶対パスファイルインスタンスによって取得されたファイルのパスの設定例を、取得していることです。Fileインスタンスのパスを構築することは、絶対パスである場合には、両者は同じです。

2.3絶対パス相対パス

  • 絶対パス:手紙の最初から完全なパス
  • 相対パス:現在のプロジェクトのディレクトリパスからの相対、このパスは、多くの場合、開発に使用します
/**
 * Project Name:review_java <br/>
 * Package Name:com.nasus.io.file <br/>
 * Date:2020/1/4 11:29 <br/>
 *
 * @author <a href="[email protected]">chenzy</a><br/>
 */
public class FilePath {

    public static void main(String[] args) {
        // Z盘下的 file.txt 文件
        File file = new File("Z:\\file.txt");
        System.out.println(file.getAbsolutePath());

        // 项目下的 file.txt 文件
        File file2 = new File("file.txt");
        System.out.println(file2.getAbsolutePath());
    }

}

输出结果:
Z:\file.txt
Z:\IDEAProject\review\review_java\file.txt
复制代码

決定機能の2.4方法

解析方法は、出力がブール値である、三つの主要な機能があります。

  • public boolean exists() :指定したファイルまたはディレクトリを表すFileインスタンスが存在します
  • public boolean isDirectory() :指定したファイルのインスタンスはディレクトリではありません
  • public boolean isFile() :Fileインスタンスが指定されていないファイル
/**
 * Project Name:review_java <br/>
 * Package Name:com.nasus.io.file <br/>
 * Date:2020/1/4 11:37 <br/>
 *
 * @author <a href="[email protected]">chenzy</a><br/>
 */
public class FileIs {

    public static void main(String[] args) {
        File file1 = new File("Z:\\file\\file.txt");
        File file2 = new File("Z:\\file");
        // 判断是否存在
        System.out.println("Z:\\file\\file.txt 是否存在:"+file1.exists());
        System.out.println("Z:\\file 是否存在:"+file2.exists());
        // 判断文件
        System.out.println("Z:\\file\\file.txt 文件?:"+file1.isFile());
        System.out.println("Z:\\file 文件?:"+file2.isFile());
        // 判断目录
        System.out.println("Z:\\file\\file.txt 目录?:"+file1.isDirectory());
        System.out.println("Z:\\file 目录?:"+file2.isDirectory());
    }

}

输出结果:
Z:\file\file.txt 是否存在:true
Z:\file 是否存在:true
Z:\file\file.txt 文件?:true
Z:\file 文件?:false
Z:\file\file.txt 目录?:false
Z:\file 目录?:true
复制代码

作成するために、2.5と削除方法

  • public boolean createNewFile() :ファイルのインスタンスが存在しないファイルを指定され、空のファイルを作成します
  • public boolean delete() :指定したファイルのインスタンスを削除すると、ファイルまたはディレクトリを表し
  • public boolean mkdir() :Fileインスタンスを作成し、指定したディレクトリを表し
  • public boolean mkdirs() :Fileインスタンスを作成し、指定したディレクトリと親ディレクトリを表し
/**
 * Project Name:review_java <br/>
 * Package Name:com.nasus.io.file <br/>
 * Date:2020/1/4 11:49 <br/>
 *
 * @author <a href="[email protected]">chenzy</a><br/>
 */
public class FileCreateDelete {

    public static void main(String[] args) throws IOException {
        System.out.println("-----创建文件------");
        // 文件的创建
        File file1 = new File("file1.txt");
        System.out.println("是否存在:"+file1.exists()); // false
        System.out.println("是否创建:"+file1.createNewFile()); // true
        System.out.println("是否存在:"+file1.exists()); // true

        System.out.println("-----创建目录------");

        // 目录的创建
        File file2 = new File("fileDir");
        System.out.println("是否存在:"+ file2.exists());// false
        System.out.println("是否创建:"+ file2.mkdir());	// true
        System.out.println("是否存在:"+ file2.exists());// true

        System.out.println("-----创建多级目录------");

        // 创建多级目录
        File file3= new File("fileDir1\\fileDir2");
        System.out.println(file3.mkdir());// false
        File file4 = new File("fileDir1\\fileDir2");
        System.out.println(file4.mkdirs());// true

        System.out.println("-----删除文件------");

        // 文件的删除
        System.out.println(file1.delete());// true

        System.out.println("-----删除目录------");
        
        // 目录的删除
        System.out.println(file2.delete());// true
        System.out.println(file4.delete());// false
    }

}
复制代码

ディレクトリトラバーサル2.6

  • public String[] list() :Fileインスタンスのディレクトリ指定されたすべての子ファイルまたはディレクトリを表す文字列の配列を返します。

  • public File[] listFiles() :ファイルの配列を返し、すべてのサブファイルまたはディレクトリがファイルのインスタンスのディレクトリを指定することを意味します。

/**
 * Project Name:review_java <br/>
 * Package Name:com.nasus.io.file <br/>
 * Date:2020/1/4 12:02 <br/>
 *
 * @author <a href="[email protected]">chenzy</a><br/>
 */
public class FileList {

    public static void main(String[] args) {
        File dir = new File("Z:\\IDEAProject");

        //获取当前目录下的文件以及文件夹的名称,用处不大。
        String[] names = dir.list();
        for(String name : names) {
            System.out.println(name);
        }
        System.out.println("--------------------------------");
        //获取当前目录下的文件以及文件夹对象,拿到了文件对象,可以做更多操作,项目常用
        File[] files = dir.listFiles();
        for (File file : files) {
            System.out.println(file);
        }
    }

}
复制代码

それは注目に値するです:リスト()またはLISTFILES()メソッド、指定されたファイルのインスタンスのいずれかがハードディスクに物理的に存在している必要があり、それ以外の場合は、トラバースすることは不可能です。

第三に、再帰

3.1再帰とは何ですか?

これは、を意味し、独自のオペレーションを呼び出すメソッド内のプログラム。

3.2再帰的分類

再帰的に二つのタイプに分け:

  • 直接再帰:自分自身が自分を呼び出すと呼ばれる方法。
  • 間接再帰:A方法Bメソッドを呼び出すことができ、BメソッドCメソッド呼び出し、メソッド呼び出しのC Aの方法。

使用して、3.3を再帰的

  • 再帰制限は、そうでなければ、メモリスタックオーバーフローが発生し、再帰を停止することができることを保証するために修飾する必要があります
  • 限られた条件ではなく、あまりにも多くの再帰再帰がありますが。それ以外の場合は、スタックメモリのオーバーフローが発生します
  • コンストラクタ無効再帰

第四に、再帰の使用

再帰を使用するとき、あなたがわからない場合は?それはここで非常に単純な法則があります:ときあなたは明確な再帰を使用することができ、メモリリークは発生しません、そうでない場合は、使用しないでください。

再帰は、再帰的な和として使用シナリオ、再帰的な階乗の多くを持っています。マルチレベル再帰的にディレクトリトラバーサルのファイルは、それが実装されているので、我々は、開発に使用されるファイルを検索します。

/**
 * Project Name:review_java <br/>
 * Package Name:com.nasus.io.file <br/>
 * Date:2020/1/4 12:15 <br/>
 *
 * @author <a href="[email protected]">chenzy</a><br/>
 */
public class FileSearch {

    public static void main(String[] args) {
        // 创建 File 对象
        File dir  = new File("Z:\\IDEAProject");
        // 调用文件搜索方法
        searchFile(dir);
    }

    public static void  searchFile(File dir) {
        // 获取子文件和目录
        File[] files = dir.listFiles();
        // 循环遍历
        for (File file : files) {
            // 判断
            if (file.isFile()) {
                // 输出查找的目标文件的绝对路径
                if ("FileIs.java".equals(file.getName())){
                    System.out.println("目标文件路径:"+ file.getAbsolutePath());
                }
            } else {
                // 是目录,调用自身,形成递归
                searchFile(file);
            }
        }
    }

}

输出结果:
目标文件路径:Z:\IDEAProject\review\review_java\src\main\java\com\nasus\io\file\FileIs.java
复制代码

第五に、送信元アドレス

Githubの送信元アドレス:github.com/turoDog/rev ...

遂に

あなたがここに表示された場合は、この記事のように、ヘルプ「進む」や「見た目」のポイントは、すべての権利?2020私はあなたが富を望みます。マイクロチャンネルサーチ「良いバスケットケース」、歓迎の注意。

「返信1024」あなたのJavaやPython、C ++、行くの完全なセット与える 、 フロントエンド、Linuxでは、アルゴリズム、大規模なデータ、人工知能、アプレット、および英語のチュートリアルを。

「返信電子書籍あなたにこの電子書籍のJavaを送信するために、」50 +を。

チュートリアルを完了

おすすめ

転載: juejin.im/post/5e2129bce51d4558021a1290
おすすめ