栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java IO 知识梳理(二、磁盘操作)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java IO 知识梳理(二、磁盘操作)

Java IO. 磁盘操作

File: File是java.io包下可以用来表示文件和信息的类,但它不表示文件的内容。在程序中操作文件和目录也可以通过File类来完成。

1. 构造方法

public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的File实例。
public File(URI uri) :通过将给定的file:URL转换成一个抽象路径名来创建一个新的File实例。

//不使用 Java 提供的分隔符字段,\是windows系统下的文件分隔符。在linux系统下为/
        File f1 = new File("E:\IO\a.txt");
//或者使用 Java 提供的分隔符File.separator
        File f2 = new File("F:"+ File.separator + "IO"+ File.separator + "a.txt");
        System.out.println(f1);//输出 E:IOa.txt  
        System.out.println(f2);//输出 F:IOa.txt
      
//public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的File实例。
        File f3 = new File("E:");
        File f4 = new File(f3,"IO");
        System.out.println(f4); //输出 E:IO
         
//public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
        File f5 = new File("E:"+File.separator+"IO"+File.separator+"a.txt");
        System.out.println(f5); //输出 E:IOa.txt
         
//public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的File实例。
        File f6 = new File("E:","IO\a.txt");
        System.out.println(f6); //输出 E:IOa.txt
2. 常用方法 文件检测相关的方法:

boolean exists(): 判断File对象所对应的文件或目录是否存在。
boolean canWrite(): 判断File对象所对应的文件和目录是否可写。如果是目录,表示是否可以在目录中创建文件。如果是文件,表示是否可以在文件中写入内容。
boolean canRead(): 判断File对象所对应的文件和目录是否可读。
boolean isFile(): 判断File对象所对应的是否是文件,而不是目录。
boolean isDirectory(): 判断File对象所对应的是否是目录,而不是文件。
boolean isAbsolute(): 判断File对象所对应的文件或目录是否是绝对路径。在Linux系统下如果文件是以斜杠 / 开头,则是绝对路径,而对于windows系统,如果文件开头是一个磁盘盘符如D:,那么为绝对路径。

//判断文件是否存在
System.out.println(file.exists());
//判断文件是否可写
System.out.println(file.canWrite());
//判断文件是否可读
System.out.println(file.canRead());
//判断是否是一个文件
System.out.println(file.isFile());
//判断是否是一个目录
System.out.println(file.isDirectory());
//是否是一个绝对路径
System.out.println(file.isAbsolute());
文件操作方法:

boolean createNewFile() 不存在则返回true并新建一个该File对象所指定的新文件 否则返回false
boolean delete(): 删除File对象所对应的文件或路径,如果表示目录,则目录下必须为空才能删除
boolean deleteonExit(): 文件使用完成后删

目录相关方法:

boolean mkdir(): 创建目录,如果上一级目录不存在,则会创建失败,可以简单理解为只能创建单级目录。调用该方法时File对象必须对应一个路径,而不是一个文件。
boolean mkdirs(): 创建多级目录,如果上一级目录不存在也会自动创建出来
String[] list(): 列出 File 象的所有子文件和路径名 ,返回String数组
File[] listFiles(): 列出File对象的所有子文件和路径,返回file数组。

文件名相关的方法:

getAbsolutePath():返回文件或者目录的绝对路径
getPath(): 将此抽象路径名转换为路径名字符串
getName(): 返回文件名
renameTo(File file): 把文件剪切为一个新的路径

//public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的File实例。
        File dir = new File("E:\IO");
        File file = new File(dir,"a.txt");
         
        //判断dir 是否存在且表示一个目录,不存在则创建这个目录
        if(!(dir.exists()||dir.isDirectory())){
            dir.mkdirs();
            //根据目录和文件名,创建 a.txt文件
            file.createNewFile();
        }
        
//返回由此抽象路径名表示的文件或目录的名称。 这只是路径名称序列中的最后一个名字。 如果路径名的名称为空,则返回空字符串。
        System.out.println(file.getName()); //输出 a.txt
        //返回此抽象路径名的父径名字符串,如果此路径名未命名为父目录,则返回null。
        System.out.println(file.getParent());//输出 E:IO
        //将此抽象路径名转换为路径名字符串。 结果字符串使用default name-separator character以名称顺序分隔名称。
        System.out.println(file.getPath()); //输出 E:IOa.txt
FilenameFilter文件过滤器:

我们在调用list方法列出所有子文件和路径的时候,可以传一个FilenameFilter进去。FilenameFilter是一个有过滤文件的accept方法的函数式接口,过滤之后返回true会保留文件,否则不会保留

        File file = new File("E:\software\jdk\bin");
        String[] sublist = file.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith("exe");
            }
        });
        for (String s : sublist) {
            System.out.println(s);//输出file对应目录下所有以.exe为后缀的文件
        }
遍历目录,获取目录结构与文件:
public class TraverseFiles {
    
    private void readDir(File dir, int space){
        //打印文件名前的空格
        for (int i = 0; i < space ; i++) {
            System.out.print(" ");
        }
        System.out.println(dir.getName());

        //获取file文件的子目录和子文件
        File[] subFiles = dir.listFiles();

        //递归获取所有子目录与子文件
        for (File subFile: subFiles){
            if(subFile.isDirectory()){
                readDir(subFile, space + 2);
            }else {
                for (int i = 0; i < space + 2 ; i++) {
                    System.out.print(" ");
                }
                System.out.println(subFile.getName());
            }
        }
    }

    
    private void readDir(File dir){
        readDir(dir, 0);
    }

    
    private void readDir (String path){
        readDir(new File(path));
    }

    public static void main(String[] args) {
        TraverseFiles t = new TraverseFiles();
        t.readDir("E:\software\jdk");
    }
}

输出结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644617.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号