Java---File详解

news2025/1/9 2:02:21

目录

一、File的概述

二、File的创建

三、File的常见成员方法

1:判断和获取

2:创建和删除

 (1)createNewFile()

(2)mkdir()

(3)delete()

3:获取并遍历

四:使用File具体实现需求:

(1)定义一个方法找某一个文件夹中,是否有以txt结尾的文件

(2)找出电脑中所有以.avi结尾的文件

 (3)删除一个多级文件夹

(4)统计一个文件夹的总大小

(5)统计一个文件夹中每种文件的个数


一、File的概述

File对象就表示一个路径,可以是文件的路径、也可以是文件夹的路径。
这个路径可以是存在的,也允许是不存在的。

二、File的创建

public File(String pathname)                  根据文件路径创建文件对象
public File(String parent,String child)       根据父路径名字符串和子路径名字符串创建文件对象
public File(File parent,String child)         根据父路径对应文件对象和子路径名字符串创建文件 
                                              对象

三、File的常见成员方法

1:判断和获取

public boolean isDirectory()          判断此路径名表示的File是否是文件夹
public boolean isFile()               判断此路径名表示的File是否是文件
public boolean exists()               判断此路径名表示的File是否存在
public long length()                  返回的是文件的大小(字节数量,/1024是KB,/1024/1024是MB以此类推)
public String getAbsolutePath()       返回文件的绝对路径
public String getPath()               返回定义文件时使用的路径
public String getName()               返回文件的名称,带后缀(没有后缀的文件也是存在的,叫纯文本文件)
public long lastModified()            返回文件的最后修改时间(时间毫秒值)

2:创建和删除

public boolean createNewFile()      创建一个新的空的文件
public boolean mkdir()              创建单级文件夹
public boolean mkdirs()             创建多级文件夹
public boolean delete()             删除文件、空文件夹

它们的返回值是boolean类型的,也就是是否创建成功

 (1)createNewFile()

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

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

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

(2)mkdir()

windwos当中路径是唯一的,如果当前路径已经存在则创建失败,返回false,(文件夹不可和纯文本文件重名,其他文件可以因为是有后缀的)
mkdir只能创建单级文件夹,无法创建多级文件夹(也就是无法在不存在的文件夹下再继续创建文件夹)

创建一个文件夹

(3)delete()

如果删除的是文件则直接删除,不走回收站
如果删除的是空文件夹,则直接删除,不走回收站
如果删除的是有内容的文件夹,则删除失败

3:获取并遍历

public File[] listFiles()                        获取当前路径下所有内容

public static File[] listRoots()                 列出可用的文件系统根
public String[] list()                           获取当前该路径下所有内容
public String[] list(FilenameFilter filter)      利用文件名过滤器获取当前该路径下所有内容
public File[] listFiles()                        获取当前该路径下所有内容
public File[] listFiles(FileFilter filter)       利用文件名过滤器获取当前该路径下所有内容
public File[] listFiles(FilenameFilter filter)   利用文件名过滤器获取当前该路径下所有内容
class Base{
      public static void main(String[] args) throws IOException {
    	  File s=new File("D:\\MySQL");
    	  File[] ss=s.listFiles();
    	  for(File f:ss) {
    		  System.out.println(f);
    	  }
      }
}

四:使用File具体实现需求:

(1)定义一个方法找某一个文件夹中,是否有以txt结尾的文件

class Base{
      public static void main(String[] args) throws IOException {
    	     File fi=new File("D:\\html\\ty");
    	     File[] f=fi.listFiles();
    	     for(File i:f) {
    	    	 System.out.println(i);
    	     }
    	     System.out.println(findfile(fi));
     }
      public static boolean findfile(File file) {
    	  //递归寻找
    	  File[] fi=file.listFiles();
    	  for(File f:fi) {
    		  if(f.isFile()) {
    			  
    			  if(f.getName().endsWith(".txt")) {
    				  return true;
    			  }
    		  }
    	  }
    	  return false;
      }
}

(2)找出电脑中所有以.avi结尾的文件,并输出

class Base{
      public static void main(String[] args) throws IOException {
    	     File file =new File("D:\\");
    	     findfile(file);
     }
      public static void findfile() {
    	  File[] s=File.listRoots();
    	  for(File i:s) {
    		  findfile(i);
    	  }
      }
     public static void findfile(File file) {
    	 File[] fi=file.listFiles();
    	 if(fi!=null) {
    		 for(File i:fi) {
        		 if(i.isFile()) {
        			 //是文件
        			 if(i.getName().endsWith(".avi")) {
        				 System.out.println(i.getName());
        			 }
        		 }
        		 else {
        			 //是文件夹,开始递归查找
        			 findfile(i);
        		 }
        	 }
    	 }
    	 
     }
}

 (3)删除一个多级文件夹(前面学到的delete还能删除文件和一个空的文件夹,无法删除有内容的文件夹)

class Base{
      public static void main(String[] args) throws IOException {
    	     File file =new File("D:\\html\\ty");
    	     del(file);
     }
      public static void del(File file) {
    	  File[] fi=file.listFiles();
    	  for(File i:fi) {
    		  if(i.isFile()) {
    			  i.delete();
    		  }
    		  else {
    			  del(i);
    		  }
    	  }
    	 file.delete();
      }
      
}

(4)统计一个文件夹的总大小

class Base{
      public static void main(String[] args) throws IOException {
    	     File file =new File("D:\\html");
    	     System.out.println(len(file));
     }
      public static long len(File file) {
    	  long sum=0;
    	  File[] fi=file.listFiles();
    	  for(File i:fi) {
    		  if(i.isFile()) {
    			  //是文件
    			  sum+=i.length();
    		  }
    		  else {
    			  //是文件夹
    			  sum+=len(i);
    		  }
    	  }
    	  return sum;
      }
}

(5)统计一个文件夹中每种文件的个数并打印
如下:txt 3个
          doc 4个
          jpg 6个

class Base{
      public static void main(String[] args){
    	  HashMap<String,Integer> map=new HashMap<>();
    	  File file=new File("D:\\ks");
    	  map=findfile(file);
    	  Set<Map.Entry<String, Integer>> s=map.entrySet();
    	  for(Map.Entry<String, Integer> i:s) {
    		  String key=i.getKey();
    		  Integer val=i.getValue();
    		  System.out.println("键="+key+" 值="+val);
    	  }
    	  
      }
      public static HashMap<String,Integer> findfile(File file){
    	  File[] fi=file.listFiles();
    	  HashMap<String,Integer> ma=new HashMap<>();
    	  for(File f:fi) {
    		  if(f.isFile()) {
    			  //是文件
    			  String name=f.getName();
    			  String[] s=name.split("\\.");
    			  if(s.length>=2) {
    				  String ss=s[s.length-1];
    				  if(ma.containsKey(ss)) {
    					  int count=ma.get(ss);
    					  count++;
    					  ma.put(ss, count);
    				  }
    				  else {
    					  ma.put(ss,1);
    				  }
    			  }
    		  }
    		  else {
    			  //是文件夹
    			  //开始递归查找
    			  Set<Map.Entry<String, Integer>> sonmap=findfile(f).entrySet();
    			  //子文件夹中的各个文件开始一个一个查找
    			  for(Map.Entry<String, Integer> i:sonmap) {
    				  String key=i.getKey();
    				  Integer val=i.getValue();
    				  if(ma.containsKey(key)) {
    					  val=val+ma.get(key);
    					  ma.put(key, val);
    				  }
    				  else {
    					  ma.put(key, val);
    				  }
    			  }
    		  }
    	  }
		return ma;
      }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54313.html

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

相关文章

高新技术企业认定条件

主要是评估企业的以下几个条件&#xff1a; 一是企业成立满一年以上&#xff0c;并且符合高企八大领域&#xff1b; 二是拥有核心自主知识产权&#xff0c;并且近一年高新产品的收入啊&#xff0c;需要占总收入的60%以上&#xff1b; 三是科技人员占当年职工总数的比例不低于…

mybatis学习:四、关联查询、缓存

7. 关联查询 7.1 准备工作: 数据库表: #订单表&#xff1a; create table tb_order (id INT AUTO_INCREMENT PRIMARY KEY,userid INT,createtime DATETIME,state VARCHAR(20) ) ENGINEInnoDB AUTO_INCREMENT1;#订单详情表 CREATE TABLE tb_orderdetail(…

[附源码]Python计算机毕业设计SSM酒店式公寓服务系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[LeetCode 1769]移动所有球到每个盒子所需的最小操作数

题目描述 题目链接&#xff1a;[LeetCode 1769]移动所有球到每个盒子所需的最小操作数 有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes &#xff0c;其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的&#xff0c;而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。…

Gradle简单配置

写在前面&#xff1a;一开始配置gradle的时候&#xff0c;最好不要把他maven仓库配置在一起&#xff0c;前段时间配置公司项目身心俱疲。大部分公司里面用gradle都是配置的自己的仓库地址&#xff0c;所以有的东西就不要和网上的配置保持一致了&#xff0c;比如说这个仓库地址。…

网站都变成灰色了,它是怎么实现的?

大家好&#xff0c;我是二哥呀。 想必大家都感受到了&#xff0c;很多网站、APP 在昨天都变灰了。 先来感受一下变灰后的效果。 这种灰色的效果怎么实现的呢&#xff1f;如何做到图片、文字、按钮都变灰的效果呢&#xff1f; 方案 1&#xff0c;换一套灰色的 UI&#xff0c;…

Github限时开源24小时,Alibaba架构师内部最新发布SpringCloud开发手册

前言 微服务是SOA之后越来越流行的体系结构模式之一&#xff01; 如果您关注行业趋势&#xff0c;就会发现,如今商业机构不再像几年前那样&#xff0c;开发大型应用程序&#xff0c;来管理端到端之间的业务功能&#xff0c;而是选择快速灵活的微服务。 ​ 通过微服务&#x…

Unity 之 后处理实现界面灰度效果(PostProcessing实现 | Shader实现)

Unity 之 后处理实现界面灰度效果前言一&#xff0c;Post Processing1.1 设置组件1.2 代码控制二&#xff0c;Shader材质实现2.1 原理API2.2 编写Shader2.3 编写代码2.4 实现效果效果展示前言 在Unity中实现后处理效果有两种方式&#xff1a;一种是通过使用Unity官方提供的Pos…

H3C AC三层组网架构,AP自动上线自动固化

核心交换机: [HX]dis cu [HX]dis current-configuration version 7.1.075, Alpha 7571 sysname HX irf mac-address persistent timer irf auto-update enable undo irf link-delay irf member 1 priority 1 dhcp enable lldp global enable system-working-mode standard xbar…

[附源码]计算机毕业设计仓库管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

C#连接MySql数据库

C#连接MySql数据库 具体步骤如下 第一步&#xff1a;提前将mysql服务打开&#xff0c;用xampp的需要将Mysql服务开启&#xff1b; 第二步&#xff1a;新建一个C#项目 第三步&#xff1a;在项目中下载&#xff1a;MySql.Data的NuGet&#xff0c;作者为Oracle&#xff1b; 第四布…

免息配资天宇优配|世界杯与A股有何关系?券商这样分析!

世界杯与A股有何联系&#xff1f; 卡塔尔世界杯开幕近两周&#xff0c;世界各地球迷热切关注。与此一起&#xff0c;不少金融机构“频频出镜”&#xff0c;多家券商发布了世界杯相关论题研究报告&#xff0c;讨论“世界杯效应”是否存在、世界杯期间是否利好大消费板块等论题。…

代码随想录刷题|LeetCode 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

目录 309.最佳买卖股票时机含冷冻期 思路 1、确定dp数组以及下标含义 2、确定递推公式 3、初始化 4、遍历顺序 5、获取结果 最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 思路 买卖股票的最佳时机含手续费 309.最佳买卖股票时机含冷冻期 题目链接&#xff1a;力扣…

Kafka的存储机制和可靠性

Kafka存储机制前言一、Kafka 存储选择二、Kafka 存储方案剖析三、Kafka 存储架构设计四、Kafka 日志系统架构设计4.1、Kafka日志目录布局4.2、Kafka磁盘数据存储五、Kafka 可靠性5.1、Producer的可靠性保证5.1.1、kafka 配置为 CP(Consistency & Partition tolerance)系统5…

【正厚软件】0基础学IT,来Linux的发展历史吧

本文来源&#xff1a;正厚软件沙老师 Linux 的发展历史 1991年林纳斯.托瓦兹开发了Linux内核&#xff0c;宣布它的诞生。 1999年&#xff0c;IBM宣布于RedHat公司建立伙伴关系&#xff0c;以确保RedHat在IBN机器上的正确运行。 2001年&#xff0c;IBM决定投入10亿美元扩大Linux…

光源基础(4)——如何选择光源及各种打光结构

如何选择和设计光源方案 打光的首要目的是把目标显现出来&#xff0c;同时把背景和干扰信息尽可能地过滤掉或者淡化&#xff0c;这样就可以得到有利于处理的图像&#xff0c;整个系统的精度和稳定性也可以得到必要的保证。 基本思路 如右图所示,光照射到物体表面之后,会发生一系…

Cadence Allegro PCB设计88问解析(十九) 之 Allegro中文字大小设置

个学习信号完整性仿真的layout工程师 在PCB投板之前&#xff0c;经常会进行丝印调整。当然有的单板设计&#xff0c;比如手机这种高密度单板是没有丝印的。但是在绝多数的PCB上是添加丝印的&#xff0c;为了方便前期的测试。丝印也就是我们常说的器件的位号&#xff0c;还包括一…

线上线程池配置错误导致服务故障

背景 某个早高峰&#xff0c;服务大量抛出线程拒绝的异常&#xff0c;同时没有触发自动扩容&#xff0c;损失了大量请求&#xff0c;影响了单量 原因分析 5why分析法 1、为什么服务抛出线程拒绝&#xff1f; rpc线程池设置为了256&#xff0c;故障期间线程处理慢&#xff0c…

【华秋Nidec尼得科】滑动开关CL-SB的应用

01 什么是滑动开关 滑动开关是用于选择、接通或断开电路的较成熟技术之一, 但由于其纯机电性质, 作为控制或交互机器或过程的某个方面的一种低成本和可靠手段&#xff0c;在现今仍然广为使用。滑动开关被设计成由人的手指驱动, 通常用于工业、商业、电信和消费类应用, 为人与机…

hadoop 3.x大数据集群搭建系列8- 一些辅助的shell脚本

文章目录一. jps查看各个节点后台进程二. 启停hadoop集群三. 群起zookeeper集群脚本zk.sh四. 同步文件五. 启动停止整个集群一. jps查看各个节点后台进程 我们经常需要查看各个节点的进程情况 vi jps.sh #!/bin/bash for i in hp5 hp6 hp7 do echo -------------------------…