当前位置: 首页 > news >正文

Java--File

FIle

概述

File的构造方法

> 1. 一个File对象代表硬盘中实际存在的一个文件或者目录。

> 2. 无论该路径下是否存在文件或者目录,都不影响File对象的创建。

代码演示:

// 文件路径名
String pathname = "D:\\aaa.txt";
File file1 = new File(pathname); // 文件路径名
String pathname2 = "D:\\aaa\\bbb.txt";
File file2 = new File(pathname2); // 通过父路径和子路径字符串String parent = "d:\\aaa";String child = "bbb.txt";File file3 = new File(parent, child);// 通过父级File对象和子路径字符串
File parentDir = new File("d:\\aaa");
String child = "bbb.txt";
File file4 = new File(parentDir, child);

 

File的常见成员方法(判断、获取)

代码演示

public class FileIs {public static void main(String[] args) {File f = new File("d:\\aaa\\bbb.java");File f2 = new File("d:\\aaa");// 判断是否存在System.out.println("d:\\aaa\\bbb.java 是否存在:"+f.exists());System.out.println("d:\\aaa 是否存在:"+f2.exists());// 判断是文件还是目录System.out.println("d:\\aaa 文件?:"+f2.isFile());System.out.println("d:\\aaa 目录?:"+f2.isDirectory());}
}
输出结果:
d:\aaa\bbb.java 是否存在:true
d:\aaa 是否存在:true
d:\aaa 文件?:false
d:\aaa 目录?:true

注意 

File f = new File("d:/aaa.txt");

File file1 = new File("d:\\aaa.txt");

这两个 File 对象在逻辑上是指向同一个文件的。它们都指向 d: 盘根目录下的 aaa.txt 文件。在Java中,文件路径可以使用正斜杠 / 或者反斜杠 \ 来表示目录分隔符。虽然在Windows系统中,反斜杠 \ 更常见,但Java的 File 类会正确处理这两种形式。

  public class FileGet {public static void main(String[] args) {File f = new File("d:/aaa/bbb.java");     System.out.println("文件绝对路径:"+f.getAbsolutePath());System.out.println("文件构造路径:"+f.getPath());System.out.println("文件名称:"+f.getName());System.out.println("文件长度:"+f.length()+"字节");File f2 = new File("d:/aaa");     System.out.println("目录绝对路径:"+f2.getAbsolutePath());System.out.println("目录构造路径:"+f2.getPath());System.out.println("目录名称:"+f2.getName());System.out.println("目录长度:"+f2.length());}}输出结果:文件绝对路径:d:\aaa\bbb.java文件构造路径:d:\aaa\bbb.java文件名称:bbb.java文件长度:636字节目录绝对路径:d:\aaa目录构造路径:d:\aaa目录名称:aaa目录长度:4096

File的常见成员方法(创建、删除)

creatNewFile

细节1:

        如果当前路径表示的文件是不存在的,则创建成功,方法返回true

细节2:

        如果父级路径是不存在的,那么方法会有异常IOException

细节3:

        createNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的 文件

 mkdir

细节1:

        Windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false

细节2:

        mkdir方法只能创建单极文件夹,无法创建多级文件夹

mkdirs

细节:

        既可以创建单级的,也可以创建多级的 

delete

细节:

        如果删除的是文件,则直接删除,不走回收站

        如果删除的是空文件夹,则直接删除,不走回收站

        如果删除的是有内容的文件夹,则删除失败 

代码演示:

public class FileCreateDelete {public static void main(String[] args) throws IOException {// 文件的创建File f = new File("aaa.txt");System.out.println("是否存在:"+f.exists()); // falseSystem.out.println("是否创建:"+f.createNewFile()); // trueSystem.out.println("是否存在:"+f.exists()); // true// 目录的创建File f2= new File("newDir");	System.out.println("是否存在:"+f2.exists());// falseSystem.out.println("是否创建:"+f2.mkdir());	// trueSystem.out.println("是否存在:"+f2.exists());// true// 创建多级目录File f3= new File("newDira\\newDirb");System.out.println(f3.mkdir());// falseFile f4= new File("newDira\\newDirb");System.out.println(f4.mkdirs());// true// 文件的删除System.out.println(f.delete());// true// 目录的删除System.out.println(f2.delete());// trueSystem.out.println(f4.delete());// true
}

File的常见成员方法(获取并遍历)

- `public String[] list()` :返回一个String数组,表示该File目录中的所有子文件或目录。

- `public File[] listFiles()` :返回一个File数组,表示该File目录中的所有的子文件或目录。

区别总结

  • 返回类型:list() 返回字符串数组,而 listFiles() 返回 File 对象数组。
  • 路径信息:list() 只返回文件名,而 listFiles() 返回包含完整路径的 File 对象。
  • 筛选器:list() 使用 FilenameFilter,而 listFiles() 使用 FileFilter。
  • 功能:listFiles() 提供了更多的灵活性,因为它返回的是 File 对象,可以进行更多的操作,如检查文件属性、删除文件等。

代码演示:

        File dir = new File("d:\\java_code");//获取当前目录下的文件以及文件夹的名称。String[] names = dir.list();for(String name : names){System.out.println(name);}//获取当前目录下的文件以及文件夹对象,只要拿到了文件对象,那么就可以获取更多信息File[] files = dir.listFiles();for (File file : files) {System.out.println(file);}

file综合练习

需求:

        在当前模块下的aaa文件夹中创建一个a.txt文件

        File f=new File("myfile/aaa");boolean mkdir = f.mkdirs();System.out.println(mkdir);//trueFile file = new File("myfile/aaa/a.txt");boolean newFile = file.createNewFile();System.out.println(newFile);//true

        定义一个方法找某一个文件夹中,是否以avi结尾的电影(暂时不考虑子文件夹)

       

    File findMoviesOfAvi(File file) {File[] files = file.listFiles();if(files!=null){for (File file1 : files) {String parrtern=".avi";if (file1.isFile()&&file1.getName().endsWith(parrtern)){return file;}}}return null;}

        找到电脑中所有的以avi结尾的电影(考虑子文件夹)

    public static File findMoviesOfAvi2(File file) {if (file == null || !file.isDirectory()) {return null;}File[] files = file.listFiles();if (files == null) {return null;}for (File childFile : files) {if (childFile.isDirectory()) {File result = findMoviesOfAvi2(childFile);if (result != null) {return result; // 如果在子目录中找到,立即返回}} else if (childFile.isFile() && childFile.getName().endsWith(".avi")) {return childFile; // 找到符合条件的文件,返回}}return null; // 没有找到符合条件的文件,返回空}

        删除一个多级文件夹

public static boolean deleteFile(File file) {if (file == null) {return false;}if (file.isDirectory()) {File[] files = file.listFiles();if (files != null) {for (File f : files) {deleteFile(f);}}}// 尝试删除文件或目录boolean success = file.delete();if (!success) {System.err.println("Failed to delete " + file.getAbsolutePath());}return success;
}

        统计文件夹中的总字节数(考虑子文件夹)

public static long count(File file) {if (file == null) {return 0;}long totalSize = 0;try {File[] files = file.listFiles();if (files != null) {for (File f : files) {if (f.isDirectory()) {totalSize += count(f); // 递归计算子目录的大小} else {totalSize += f.length(); // 累加文件大小}}}} catch (SecurityException e) {System.err.println("Access denied for " + file.getAbsolutePath());}return totalSize;
}

        统计一个文件夹中每种文件的个数并打印(考虑子文件夹)

        打印格式如下:

                                txt:3个

                                doc:4个

                                jpg:6个

    public static HashMap<String, Integer> countFile(File file) {HashMap<String, Integer> map = new HashMap<>();if (file == null)return null;File[] files = file.listFiles();if (files != null) {for (File f : files)if (f.isDirectory()) {//子文件夹中每一种文件的个数HashMap<String, Integer> stringIntegerHashMap = countFile(f);for (String key : stringIntegerHashMap.keySet()) {if (map.containsKey(key))map.put(key, map.get(key) + stringIntegerHashMap.get(key));}} else {String name = f.getName();String[] arr = name.split("/.");if(arr.length>=2){String endName=arr[arr.length-1];if(map.containsKey(endName)){map.put(endName,map.get(endName)+1);}else{map.put(endName,1);}}}}return map;}


http://www.mrgr.cn/news/33737.html

相关文章:

  • 【详细解答】指出下面指令的错误:IN AL,300H
  • 2024年 5 个优秀的Flutter图标库
  • CSS 选择器的分类与使用要点二
  • linux中vim编辑器的应用实例
  • 在Spring Boot中实现多环境配置
  • weak_from_this
  • 信息安全技术基础知识
  • vscode 顶部 Command Center,minimap
  • RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案
  • uniapp自定义Tabbar教程
  • [Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
  • 【机器学习】12-决策树1——概念、特征选择
  • 内网穿透out了?黑群晖+IPv6+NAS公网助手的访问体验
  • 强大的重命名工具 | Bulk Rename Utility v4.0 便携版
  • Integer 源码记录
  • Web Components之继承
  • K8s容器运行时,移除Dockershim后存在哪些疑惑?
  • 局部凸空间及其在算子空间中的应用之四——归纳极限空间2
  • MATLAB中多张fig图合并为一个图
  • 如何使用数字人直播?