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

Java:File类

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

Java:File类

操作系统中的数据都保存在文件中,而文件存放在相应的文件夹中。在Java当中,计算机中所有的文件和目录都用File这个类描述。

File类的出现

在API中搜索File类,其描述为:File文件和目录路径名的抽象表示形式。
Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。

File的操作

File类构造函数与分隔符

查阅File的构造函数,发现原来File类有多个构造函数,可以构造File对象。

 //File类会自动甄别文件系统路径Linux/Windows
 //关联了一个相对路径的文件
 File f1 = new File("haha.txt");
 //特殊:对于当前的IDEA/Eclipse而言 相对路径获取的文件都在项目根目录下
 System.out.println(f1.exists()); //项目根目录下的haha.txt文件
 File f4 = new File("C:\Users\HENG\Desktop\YD_Java\src\Chapter11\haha.txt");
 System.out.println(f4.exists()); //和此类同目录的haha.txt文件
 //关联了一个绝对路径的文件
 File f2 = new File("C:\Users\HENG\haha.txt");
 //如果此路径是Linux的文件路径 / 根目录
 File f3 = new File("/haha/xixi/lala");
 File f5 = new File("C:\Users\HENG\Desktop\YD_Java\src\Chapter11","haha.txt");
 System.out.println(f5.exists());
 File parent = new File("C:\Users\HENG\Desktop\YD_Java\src\Chapter11");
 File f6 = new File(parent,"haha.txt");
 System.out.println(f6.exists());
 //因为Linux/Unix/Windows/MAC这些操作系统中 路径分割符是不统一的
 //当我们不确定程序所运行的系统环境 如果需要用到文件路径 路径分割符采用File自带的separator
 String parentPath = "C:\Users\HENG\Desktop\YD_Java\src\Chapter11";
 File f7 = new File(parentPath + File.separator + "haha.txt");
 System.out.println(f7.exists());

File类的获取相关

File f = new File("C:\Users\HENG\Desktop\YD_Java\第11章笔记.txt");
//打印文件的绝对路径,即全路径
System.out.println(f.getAbsolutePath());
//文件对象中封装的路径是什么获取到的就是什么
System.out.println(f.getPath());
//获取文件名,即获取相对路径
System.out.println(f.getName());
//获取文件大小(单位字节 b)
System.out.println(f.length());
//最后一次修改时间(毫秒值),可以使用日期格式化把毫秒值转成字符串文本格式
System.out.println(f.lastModified());
// 毫秒值--Date--格式化--字符串文本
String str_date = DateFormat.getDateTimeInstance(DateFormat.LONG,
DateFormat.LONG).format(new Date(f.lastModified()));
System.out.println(str_date);

文件和文件夹的创建

 //文件的创建 目录的创建
 File f1 = new File("file01.txt");
 //File f1 = new File("E:\file01.txt");
 //E盘不存在 则报错 IOException
 //文件不存在 则创建 返回 true
 System.out.println(f1.createNewFile());
 //文件已存在 则不创建 返回 false
 System.out.println(f1.createNewFile());
 //合理的创建方式 先判断 再考虑是否创建
 if (!f1.exists()) {
     f1.createNewFile();
 }
 //一般而言 目录是没有后缀名 文件也可以没有后缀名
 File f2 = new File("haha");
 if (!f2.exists()) {
      f2.createNewFile();
 }
 //File dirc1 = new File("haha");
 //上面已经有一个同名没后缀名的文件 从系统角度而言 属于重名内容 不允许创建
 File dirc1 = new File("lala");
 //创建一个目录
 System.out.println(dirc1.mkdir());
 File dirc2 = new File("xixi.txt");
 System.out.println(dirc2.mkdir());
 //上边xixi.txt目录已经创建 则同名的xixi.txt文件不允许创建
 System.out.println(dirc2.createNewFile());
 //总而言之,对于系统而言 无论是文件还是目录 只要重名都不能再创建新的了
 //尽量创建文件时加上后缀名
 //尽量创建目录时不要有非法字符存在(后缀名)
 File dirc3 = new File("abc/def/ghi");
 //mkdir一次只能创建一个一级目录
 System.out.println(dirc3.mkdir());
 //如果创建多级目录用mkdirs
 System.out.println(dirc3.mkdirs());

文件和文件夹的删除

File f1 = new File("xixi.txt");
//删除一个目录,不走回收站
f1.delete();
//该目录中有多个子文件和其他子目录,不能直接删除
File f2 = new File("abc");
System.out.println(f2.delete());
//如果非得要删除的话 只能先将其内部的所有元素删除之后 再删除该目录
File f3 = new File("haha.txt");
f3.delete();
//总而言之 删除文件 用delete,delete只能删除单一的文件或单一的目录
//如果所删除的目录有内容,则不能删除,只能手动

子文件与文件过滤器

public static void main(String[] args) {
    File dir = new File("C:\Users\HENG\Desktop\YD_Java");
    //查看该目录下所有的文件(包含隐藏文件)
    //list()返回的是该目录下第一层级的所有文件和目录的名字的字符串数组
    MyFileNameFilter filter = new MyFileNameFilter();
    String[] fileNames = dir.list(filter);//只能传关于名字的过滤
    if (fileNames != null) {
        for (String name : fileNames) {
            System.out.println(name);
        }
    }
    MyFileFilter filter2 = new MyFileFilter();
    //listFiles()返回的是该目录下第一层级的所有文件和目录的File对象的一维数组
    File[] files = dir.listFiles(filter2);//关于文件名 文件属性的过滤都行
    if (files != null) {
        for (File file : files) {
            System.out.println(file.getAbsolutePath());
        }
    }
    dir.list();
}
public static class MyFileFilter implements FileFilter {

    @Override
    public boolean accept(File file) {
        return file.length() > 2000;
    }
}
public static class MyFileNameFilter implements FilenameFilter {
    //File dir 父目录
    //String name 当前文件的名称
    @Override
    public boolean accept(File dir, String name) {
        return name.endsWith(".txt");
    }
}

获取文件夹全部内容

private static void printDirDieDai(File dir) {
    linkedList queue = new linkedList<>();
    queue.offer(dir);
    while (!queue.isEmpty()) {
        File file = queue.poll();
        System.out.println("【" + file.getName() + "】");
        File[] files = file.listFiles();
        if (files != null) {
            for (File f : files) {
                if (f.isFile()) {
                    System.out.println(f.getName());
                } else {
                    queue.offer(f);
                }
            }
        }
    }
}
private static void printDir(File dir,int level) {
    System.out.println(getSpace(level) + "【" + dir.getName() + "】");
    File[] files = dir.listFiles();
    if (files == null) {
        return;
    }
    for (File file : files) {
        if (file.isFile()) {
            System.out.println(getSpace(level + 1) + file.getName());
        } else {
            printDir(file,level + 1);
        }
    }
}
private static String getSpace(int level) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < level; i++) {
        sb.append("--");
    }
    return sb.toString();
}

删除文件夹全部内容

private static void deleteDir(File dir) {
    File[] files = dir.listFiles();
    if (files == null) {
        dir.delete();
        return;
    }
    for (File file : files) {
        if (file.isFile()) {
            file.delete();
        } else {
            deleteDir(file);
        }
    }
    dir.delete();
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/325026.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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