第九章 java IO流

第九章 java IO流,第1张

第九章 java IO流

如何学习第九章 java Io 流

我们从基础四个类开始:
fileoutputStream类
fileinputStream类
FileReader类
FileWriter类
到常用高级的
字节缓冲流类
字符缓冲流类
InputStreamReader类
OutputStreamWriter类
ObjectOutputStream类
Propertites类
总之就是十个类的学习

## ⼀、File类

概念:代表物理盘符中的⼀个⽂件或者⽂件夹。
⽅法名 描述
createNewFile() 创建⼀个新⽂件。
mkdir() 创建⼀个新⽬录。
delete() 删除⽂件或空⽬录。
exists() 判断File对象所对象所代表的对象是否存在。
getAbsolutePath() 获取⽂件的绝对路径。
getName() 取得名字
getParent() 获取⽂件/⽬录所在的⽬录。
isDirectory() 是否是⽬录。
isFile() 是否是⽂件。
length() 获得⽂件的⻓度。
listFiles() 列出⽬录中的所有内容。
开始演示代码:
FileDemo1 文件的一波 *** 作 非常简单 没有任何疑问

package com.tuling.part1;

import java.io.File;

public class FileDemo {
    public static void main(String[] args) {
        File file =new File("D:\tuling\test1\demo1.java");
        System.out.println("文件的绝对路径:"+file.getAbsolutePath());
        System.out.println("文件的名字:"+file.getName());
        System.out.println("文件的大小:"+file.length());

   
    }
}

运行结果 没有任何疑问

文件的绝对路径:D:tulingtest1demo1.java
文件的名字:demo1.java
文件的大小:9

文件和文件夹的 *** 作是一模一样的 文件是否存在不影响方法的使用 非常简单

package com.tuling.part1;

import java.io.File;

public class FileDemo {
    public static void main(String[] args) {
        File file =new File("D:\tuling\test1\demo1.java");
        System.out.println("文件的绝对路径:"+file.getAbsolutePath());
        System.out.println("文件的名字:"+file.getName());
        System.out.println("文件的大小:"+file.length());


        File dir =new File("D:\tuling\test");
        System.out.println("文件夹的绝对路径:"+dir.getAbsolutePath());
        System.out.println("文件夹的名字:"+dir.getName());
        System.out.println("文件夹的大小:"+dir.length());


    }
}

运行结果

文件的绝对路径:D:tulingtest1demo1.java
文件的名字:demo1.java
文件的大小:9
文件夹的绝对路径:D:tulingtest
文件夹的名字:test
文件夹的大小:0
**//判断以下文件是否存在**
  if(file.exists()){
        file.delete();
    }else{
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

思考 如何递归遍历一个文件夹下所有的文件和文件夹呢
代码如下;

package com.tuling.part1;

import java.io.File;
import java.io.IOException;

public class FileDemo {



    //递归遍历文件夹所有的内容
    public static void printDir(File dir){
        if(dir.isFile()){
            System.out.println(dir);
        }else{
            File[] files = dir.listFiles();
            for (File file:files
                 ) {


                if(file.isFile()){
                    System.out.println(file);
                }else{
                    printDir(file);
                }

            }
        }


    }



    public static void main(String[] args) {
        File file =new File("D:\tuling\test1\demo.txt");
        System.out.println("文件的绝对路径:"+file.getAbsolutePath());
        System.out.println("文件的名字:"+file.getName());
        System.out.println("文件的大小:"+file.length());
        //判断以下文件是否存在
        if(file.exists()){
            file.delete();
        }else{
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println("是否是文件:"+file.isFile());
        System.out.println("是否是文件夹:"+file.isDirectory());
        File dir =new File("D:\tuling\test1");
        System.out.println("文件夹的绝对路径:"+dir.getAbsolutePath());
        System.out.println("文件夹的名字:"+dir.getName());
        System.out.println("文件夹的大小:"+dir.length());
        if(!dir.exists()){
            dir.mkdirs();

        }else{
           // dir.delete();
        }
        System.out.println("是否是文件:"+file.isFile());
        System.out.println("是否是文件夹:"+file.isDirectory());

        String[] list = dir.list();
        for (String str:list
             ) {
            System.out.println(str);

        }

//        File[] files = dir.listFiles();
//        for (File ele:files
//             ) {
//            System.out.println(ele);
//
//        }
        printDir(dir);

    }
}

运行结果如下:

文件的绝对路径:D:tulingtest1demo.txt
文件的名字:demo.txt
文件的大小:0
是否是文件:true
是否是文件夹:false
文件夹的绝对路径:D:tulingtest1
文件夹的名字:test1
文件夹的大小:0
是否是文件:true
是否是文件夹:false
child
demo.txt
demo1.java
demo2.java
D:tulingtest1childchild.txt
D:tulingtest1demo.txt
D:tulingtest1demo1.java
D:tulingtest1demo2.java

异常 来了
空指针异常案例

public static void printDir(File dir){
        if(dir.isFile()&&dir.getName().endsWith(".java")){
            System.out.println(dir);
        }else{
            File[] files = dir.listFiles();
            for (File file:files
                 ) {


                if(file.isFile()&&file.getName().endsWith(".java")){
                    System.out.println(file);
                }else{
                    printDir(file);
                }

            }
        }
```java
Exception in thread "main" java.lang.NullPointerException
	at com.tuling.part1.FileDemo.printDir(FileDemo.java:16)
	at com.tuling.part1.FileDemo.printDir(FileDemo.java:23)
	at com.tuling.part1.FileDemo.printDir(FileDemo.java:23)
	at com.tuling.part1.FileDemo.main(FileDemo.java:77)

因为有些文件是.txt结尾的 而不是.java结尾的

FileFilter接⼝
FileFilter:⽂件过滤器接⼝boolean accept(File pathname) 。
当调⽤File类中的listFiles()⽅法时,⽀持传⼊FileFilter接⼝接⼝实现类,对获取⽂件进⾏过滤,只有满
⾜条件的⽂件的才可出现在listFiles()的返回值中。初学者学起来比较绕 有点复杂 多来几遍比较好
案例代码演示:

package com.tuling.part1;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

public class FileDemo {



    //递归遍历文件夹所有的内容
    public static void printDir(File dir){
        if(dir.isFile()&&dir.getName().endsWith(".java")){
            System.out.println(dir);
        }else{
            File[] files = dir.listFiles();
            if(files!=null){
            for (File file:files
                 ) {


                if(file.isFile()&&file.getName().endsWith(".java")){
                    System.out.println(file);
                }else{
                    printDir(file);
                }

            }
        }}


    }



    public static void printDir2(File dir){
        if(dir.isFile()&&dir.getName().endsWith(".java")){
            System.out.println(dir);
        }else{
            File[] files = dir.listFiles(new FileFilter() {
                @Override
                public boolean accept(File file) {
                    return file.isDirectory()||file.isFile()&&file.getName().endsWith(".java");
                }
            });
            if(files!=null){
                for (File file:files
                ) {


                    if(file.isDirectory()){
                        printDir(file);
                    }else{
                       System.out.println(file);
                    }

                }
            }}


    }


    public static void main(String[] args) {
        File file =new File("D:\tuling\test1\demo.txt");
        System.out.println("文件的绝对路径:"+file.getAbsolutePath());
        System.out.println("文件的名字:"+file.getName());
        System.out.println("文件的大小:"+file.length());
        //判断以下文件是否存在
        if(file.exists()){
            file.delete();
        }else{
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println("是否是文件:"+file.isFile());
        System.out.println("是否是文件夹:"+file.isDirectory());
        File dir =new File("D:\tuling\test1");
        System.out.println("文件夹的绝对路径:"+dir.getAbsolutePath());
        System.out.println("文件夹的名字:"+dir.getName());
        System.out.println("文件夹的大小:"+dir.length());
        if(!dir.exists()){
            dir.mkdirs();

        }else{
           // dir.delete();
        }
        System.out.println("是否是文件:"+file.isFile());
        System.out.println("是否是文件夹:"+file.isDirectory());

        String[] list = dir.list();
        for (String str:list
             ) {
            System.out.println(str);

        }

//        File[] files = dir.listFiles();
//        for (File ele:files
//             ) {
//            System.out.println(ele);
//
//        }
        printDir2(dir);

    }
}

运行结果

文件的绝对路径:D:tulingtest1demo.txt
文件的名字:demo.txt
文件的大小:0
是否是文件:true
是否是文件夹:false
文件夹的绝对路径:D:tulingtest1
文件夹的名字:test1
文件夹的大小:0
是否是文件:true
是否是文件夹:false
child
demo.txt
demo1.java
demo2.java
D:tulingtest1childchild.java
D:tulingtest1demo1.java
D:tulingtest1demo2.java

总结: 本节知识点主要讲解了 file类的常用方法 以及一个filefilter接口的使用

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5713216.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-18

发表评论

登录后才能评论

评论列表(0条)

    保存