JavaWeb~File文件的操作 实现递归打印文件目录列表

IO处理的是什么?

  • 操作系统对于硬件设备进行了进一步的抽象 把硬件设备都视为一个一个的文件 也就是一切皆文件思想
  • 而IO操作就是处理的就是这些文件 例如通过网卡传过来的数据 从网卡中接收数据的操作类似于读文件 往网卡中发送数据的操作就类似于写文件
  • 那什么是文件? 我们日常生活中txt doc exe .java lib mp3 等等都是一些文件
  • 文件简单理解 在外设硬盘上面保存数据的一种方式
  • 文件一共可以由两部分构成:属性(文件大小,文件名,文件类型等)+内容(就是文件里面放的是什么)
  • 所以我们学 JavaIO ,学什么呢?就学对文件的属性和内容进行操作,而实际写入或者读取的过程,我们称之为IO

绝对路径与相对路径

  • 绝对路径
    以c: 或者 D: 盘开头的路径 就叫做绝对路径 如 D:\java\test\more
  • 绝对路径
    必须先指定一个工作目录 然后用 . 或者 .. 开头的路径 表示一个具体的文件位置 相对路径的参照点就是当前这个工作的目录(.. 表示从当前目录的上一级目录开始找)

例如:
D:\java\test 是绝对路径 而 .\study.txt 是相对路径
D:\java\test\more 是绝对路径 而 ..\study.txt 是相对路径

  • 当工作目录发生变化的时候 此时的相对路径的写法就会发生变化 但我们下面构造File对象的时候使用相对路径和绝对路径都是可以的 具体文件是否存在 需要使用 existi 方法判断
  • file.getAbsolutePath() 方法获取File对象的绝对路径

File类的常用方法

  • 在 java.io 包之中,用 File 类来对文件进行操作(创建、删除、取得信息等)

File类的准备工作

  • 常用构造方法
  • public File(String pathname) 创建指定路径文件对象
  • public File(String parent, String child) 同上,但可指明父路径和子路径
import java.io.File;

public class IOTest {
    public static void main(String[] args) {
        String path = "D:\\java\\test\\more";
        String pathname = path + "\\moreTest.txt";
        File file = new File(pathname);
    }
}

File类的基本文件操作

  • public boolean exists() 测试指定路径中文件或者目录是否存在
  • public boolean isDirectory() 判定一个文件是目录
  • public boolean isFile() 判定是否是文件
  • public boolean delete() 删除文件
  • public boolean createNewFile() throws IOException 创建一个新文件
import java.io.File;
import java.io.IOException;

public class IOTest {
    public static void main(String[] args) {
        String path = "D:\\java\\test\\more";
        String pathname = path + "\\moreTest.txt";
        File file = new File(pathname);

        //判断是否存在
        System.out.print("判断是否存在");
        System.out.println(file.exists());

        //如果存在就查看是否为目录或者文件
        if (file.exists()) {
            //判断是否目录
            System.out.println("判断是否目录" + file.isDirectory());
            //判断是否文件
            System.out.println("判断是否文件" + file.isFile());
        }

        //删除文件
        System.out.print("删除文件");
        System.out.println(file.delete());

        if(!file.exists()){
             System.out.println("删除文件成功!");
        } else {
             System.out.println("删除文件失败!");
        }


        //创建文件
        if (! file.exists()) {
            try {
                System.out.print(file.createNewFile());
                System.out.println("创建成功");
            } catch (IOException e) {
                System.out.println("创建失败");
            }
        } else {
            System.out.println("file存在不需要创建");
        }

        System.out.println("最后file是否存在" + file.exists());
    }
}

在这里插入图片描述

File类的目录操作

  • public boolean mkdir() 创建一个空目录
  • public boolean mkdirs() 创建目录(无论有多少级父目录,都会创建)
  • public String getParent() 取得父路径
  • public File getParentFile() 取得父File对象
import java.io.File;

public class IOTest2 {

    public static void main(String[] args) {

        String path = "D:\\java\\test\\more";
        //要创建的目录
        String dir = "\\dir1\\dir2\\dir3";
        String pathname = path + dir;

        File file = new File(pathname);

        System.out.println("file是否存在" +file.exists());
        System.out.println("创建成功"+ file.mkdirs());
        System.out.println("file是否存在" +file.exists());

        System.out.println("获得父路径" + file.getParent());

        File filePar = file.getParentFile();
        System.out.println("获得父对象" + filePar);
    }
}

在这里插入图片描述

File类的文件属性操作

  • public long length() 取得文件大小(字节)
  • public long lastModified() 最后一次修改日期
import javax.xml.crypto.Data;
import java.io.File;
import java.util.Date;

public class IOTest3 {

    public static void main(String[] args) {

        String path = "D:\\java\\test\\more\\";
        String name = "moreTest.txt";

        File file = new File(path + name);

        //获得文件字节大小 注意返回的是long类型
        System.out.println("moreTest.txt" + "大小为" + file.length());

        //最近修改时间
        System.out.println("moreTest.txt最近修改时间为" + new Date(file.lastModified()));
    }
}

在这里插入图片描述

File类的其他操作

  • public File[] listFiles() 列出一个目录指定的全部组成
import java.io.File;

public class IOTest4 {

    public static void main(String[] args) {

        File file = new File("D:\\java");

        File[] files = file.listFiles();

        for (File f : files
             ) {
            System.out.println(f);
        }
    }
}

在这里插入图片描述

实现递归打印文件目录列表

  • 虽然File提供有 listFiles() 方法,但是这个方法本身只能够列出本目录中的第一级信息。如果要求列出目录中所有级的信息,必须自己来处理。这种操作就必须通过递归的模式来完成。
import java.io.File;

public class IOTest4 {

    public static void main(String[] args) {

        File file = new File("D:\\java");
        listAllFiles(file);

       /* File[] files = file.listFiles();

        for (File f : files
             ) {
            System.out.println(f);
        }*/
    }

    private static void listAllFiles(File file) {

        if (file.isDirectory()) {
            //如果是目录 就获得其目录的所有组成
            File[] files = file.listFiles();

            //递归遍历所有组成
            assert files != null;
            for (File f : files
                 ) {
                listAllFiles(f);
            }
        } else {
            //说明是文件就输出其路径
            System.out.println(file);
        }
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Shangxingya/article/details/106803106