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.xdnf.cn/news/148294.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

一些迷你型信息系统 - 2

1 Linux内核数据结构信息查询 Linux内核的数据结构众多&#xff0c;成千上万&#xff0c;做一个程序来存储查询信息&#xff1b;自己录入数据&#xff1b; 代码字段最长可录入65535个字符&#xff1b;每个字段录入时长度超限会有红色告警&#xff1b; 其他的以后想到再做&#…

5分钟快速制作高质量、美观的Excel甘特图

你是否还在为如何制作甘特图而感到苦恼&#xff1f; 是否因为甘特图制作过程繁琐、耗时过长而影响了你的工作效率&#xff1f; 是否每当任务计划发生变更时&#xff0c;都需要反复重新绘制甘特图&#xff0c;让你感到疲惫不堪&#xff1f; 又或者&#xff0c;你是否一直渴望…

【AI算法岗面试八股面经【超全整理】——NLP】

AI算法岗面试八股面经【超全整理】 概率论【AI算法岗面试八股面经【超全整理】——概率论】信息论【AI算法岗面试八股面经【超全整理】——信息论】机器学习【AI算法岗面试八股面经【超全整理】——机器学习】深度学习【AI算法岗面试八股面经【超全整理】——深度学习】NLP【A…

cmd快速进入文件夹目录下

首先&#xff0c;将文件夹直接点击左键拖动至cmd窗口中&#xff0c;就可以得到目录路径。 还有就是&#xff0c;在命令行直接敲入D:或者C:就可以在磁盘之间进行转换&#xff0c;注意冒号不要丢。 再有&#xff0c;如果进入某磁盘中的一个文件夹&#xff0c;使用cd命令。路径获取…

新质农业——水肥一体化技术

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案&#xff0c;帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、埃域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&…

开机容易关机难?合宙Air201资产定位模组LuatOS的PWRKEY控制来实现!

关于合宙Air201&#xff0c;我们已经发布了5期基础知识啦&#xff01;你是不是已经都学会了&#xff1f; 来来来&#xff0c;我们继续高阶学习&#xff1a;合宙Air201应用示例——PWRKEY控制关机功能 PWRKEY控制关机功能 合宙Air201资产定位模组——是一个集成超低功耗4G通信…

命名管道详解

命名管道 匿名管道应用的限制就是只能在具有共同祖先的进程间通信。如果我们想要在不相关的进程之间交换数据&#xff0c;可以使用使用FIFO文件来做这项工作&#xff0c;它被称为命名管道。命名管道是一种特殊类型的文件。 mkfifo函数 命名管道可以从命名行上创建&#xff0c…

iOS V2签名网站系统源码,开源免授权(含视频教程)

这是一款iOS签名站的开源源码&#xff0c;免去了授权&#xff0c;它支持UDID获取、软件选择以及签名码功能。 同时&#xff0c;用户可以多开APP进行安装。这是一个自主可下载的版本&#xff0c;感兴趣的用户可以自行获取。 源码下载&#xff1a;https://download.csdn.net/do…

云和恩墨携手华为,发布zCloud数据库备份管理一体机并宣布共建数据保护生态...

为期三天的第九届华为全联接大会&#xff08;HUAWEI CONNECT 2024&#xff09;于9月19日在上海世博中心&展览馆盛大召开。20日下午&#xff0c;一场围绕“全场景数据保护&#xff0c;护航数智化时代”的专题论坛举办&#xff0c;云和恩墨受邀参加&#xff0c;并期待与华为合…

【Linux的进程管理】

进程管理 Linux的进程进程的管理进程的状态不同状态的进程由不同的功能的链表进行管理Linux的进程切换和进程上下文进程调度抢占和非抢占式调度调度算法先来先服务CPU密集和I/O密集 最短作业优先调度算法高响应比优先调度算法时间片轮转调度算法时间片的长度设置 最高优先级调度…

ava总结篇系列:Java泛型Java sort用法详解

一. 泛型概念的提出&#xff08;为什么需要泛型&#xff09;&#xff1f; 首先&#xff0c;我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(String[] args) { 4 List list new ArrayList(); 5 list.add(&q…

(学习记录)使用 STM32CubeMX——GPIO引脚输出配置

学习总结&#xff1a;&#xff08;学习总结&#xff09;STM32CubeMX HAL库 学习笔记撰写心得https://blog.csdn.net/Wang2869902214/article/details/142435481 STM32F103C8T6的GPIO引脚输出配置 时钟配置 &#xff08;学习记录&#xff09;使用 STM32CubeMX——配置时钟&…

原子结构与电荷

1.原子结构与电荷 1.1 物质到底是由什么构成的 阴极射线 电磁波 电磁波 我们生活中的物质。究竟是由什么构成的呢&#xff1f;这个问题其实困扰了人们很久。 1.提出“原子”的概念 早在2400年前&#xff0c;古希腊哲学家德莫克里特就提出了原子的概念。当时他就认为&…

鸿蒙操作系统(HarmonyOS)生态与机遇

HarmonyOS技术特点 鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是华为公司开发的一款面向全场景的分布式操作系统。 架构特点&#xff1a; 分布式架构&#xff1a;这是鸿蒙系统的显著特点之一。它支持跨设备无缝协同体验&#xff0c;使不同设备能够快速连接、能力互助和资…

Qt --- 常用控件的介绍 --- 其他控件

一、QPushButton QWidget中设计到的各种属性/函数/使用方法&#xff0c;针对接下来要介绍的Qt的各种控件都是有效的。 使用QPushButton表示一个按钮&#xff0c;这也是当前我们最熟悉的一个控件了。这个类继承了QAbstractButton&#xff0c;这个类是一个抽象类&#xff0c;是…

逆元 P3811

【模板】模意义下的乘法逆元 - 洛谷 费马太典了。 ax py 1 (mod p) 所求 x 即逆元 exgcd. 递推: 转自zjp_shadow 由整除性得 -p/i p-p/i; 故有代码&#xff08;只用了递推 #include<bits/stdc.h> #define int long long using namespace std; int exgcd(int a,…

代码随想录算法训练营第58天|卡码网 117. 软件构建、47. 参加科学大会

1. 卡码网 117. 软件构建 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1191 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0117.软件构建.html 思路&#xff1a;使用BFS BFS的实现思路&#xff1a; 拓扑排序的过程&#xff0c;其实就两步…

win11永久关闭Windows Defend

# Win11 Microsoft Defender 防病毒 彻底关闭 Win11 Microsoft Defender 防病毒关闭 **WinR****——输入 gpedit.msc &#xff0c;打开本地组策略编辑器——计算机配置——管理模板——Windows组件——Microsoft Defender 防病毒——关闭 Microsoft Defender 防病毒策略——设置…

大厂面试真题:SpringBoot的核心注解

其实理解一个注解就行了&#xff20;SpringBootApplication&#xff0c;我们的启动类其实就加了这一个 但是这么答也不行&#xff0c;因为面试官要的答案肯定不止这一个 我们打开SpringBootApplication的源码&#xff0c;会发现上面加了一堆的注解 相对而言比较重要是下面三个…

《Learning Interactive Real-World Simulators》论文导读

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl引言与背景 为了构建一个能够真实反映现实世界并允许智能体进行交互的模拟器,《Learning Interactive Real-World Simulators》这篇论文提出了一种通过学习生成模型来创建交互式现实世界模拟器的…