File(文件)

news2025/1/21 4:56:16

File对象表示一个路径,可以是文件的路径,也可以是文件夹的路径。

这个路径可以存在,也允许不存在。

创建File对象的方法

public class test {
    public static void main(String [] args) {
    	//根据字符串创建文件
    	String str="C:\\Users\\PC\\Desktop\\a.txt";
    	File f=new File(str);
    	System.out.println(f);
    	//根据父路径和子路径创建文件
    	//父路径:C:\\Users\\PC\\Desktop
    	//子路径:a.txt
    	String parent="C:\\Users\\PC\\Desktop";
    	String child="a.txt";
    	File f1=new File(parent,child);
    	System.out.println(f1);
    	//把一个File表示的路径和String表示的路径进行拼接
    	File parent2=new File("C:\\Users\\PC\\Desktop");
    	String child2="a.txt";
    	File f2=new File(parent2,child2);
    	System.out.println(f2);
    }
}

File常见的成员方法

在电脑D盘中先创建了一个文件夹Date再在Date中创建了几个文件夹和文件

判断方法:

public class test {
    public static void main(String [] args) {
    	//对一个文件进行判断
    	File f1=new File("D:\\Date\\c.txt");
    	System.out.println(f1.isDirectory());//判断是否为文件夹
    	System.out.println(f1.isFile());//判断是否为文件
    	System.out.println(f1.exists());//判断是否存在
    	System.out.println("-------------");
    	//对一个文件夹进行判断
    	File f2=new File("D:\\Date\\aaa");
    	System.out.println(f2.isDirectory());
    	System.out.println(f2.isFile());
    	System.out.println(f2.exists());
    	System.out.println("-------------");
    	//对一个不存在路径进行判断
    	File f3=new File("D:\\Date\\abc");
    	System.out.println(f3.isDirectory());
    	System.out.println(f3.isFile());
    	System.out.println(f3.exists());
    	
    }
}

获取方法:

public class test {
    public static void main(String [] args) {
    	
    	File f1=new File("D:\\Date\\c.txt");
        long len=f1.length();//获取文件长度(字节数)
        System.out.println(len);
        System.out.println("---------");
        File f2=new File("\\c.txt");
        String s1 =f1.getAbsolutePath();
        String s2 =f2.getAbsolutePath();//获取文件绝对路径
        System.out.println(s1);
        System.out.println(s2);
        System.out.println("---------");
        String t1= f1.getPath();//返回文件使用时的路径,就是定义file的路径
        String t2= f2.getPath();
        System.out.println(t1);
        System.out.println(t2);
        System.out.println("---------");
        String n1= f1.getName();
        System.out.println(n1);
        File f3=new File("D:\\Date\\aaa");
        String n2=f3.getName();
        System.out.println(n2);
        System.out.println("---------");
        System.out.println(f1.lastModified());//最后修改时间(毫秒值)
    }
}

createNewFile()——创建一个新的空的文件

注:当前路径的表示的文件是不存在的,则创建成功,方法返回true,若文件已存在,则创建失败,方法返回false。

若父级路径是不存在的,那么方法会有异常。

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

public class test {
    public static void main(String [] args) throws IOException {
    	
    	File f1=new File("D:\\Date\\g.txt");
        boolean file=f1.createNewFile();
        System.out.println(file);
    }
}

mkdir()——创建单级文件夹

public class test {
    public static void main(String [] args) throws IOException {
    	
    	File f1=new File("D:\\Date\\ggg");
        boolean file=f1.mkdir();
        System.out.println(file);
    }
}

mkdirs()——创建多级文件夹

public class test {
    public static void main(String [] args) throws IOException {
    	
    	File f1=new File("D:\\Date\\ggg\\bbb\\sss");
        boolean file=f1.mkdirs();
        System.out.println(file);
    }
}

delete()——删除文件、文件夹

若删除的是文件,则直接删除不走回收站。

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

若删除的是有内容的文件夹,则删除失败。

public class test {
    public static void main(String [] args) throws IOException {
    	
    	File f1=new File("D:\\Date\\g.txt");
        boolean b=f1.delete();
        System.out.println(b);
    }
}

public class test {
    public static void main(String [] args) throws IOException {
    	
    	File f1=new File("D:\\Date");
        File[] file= f1.listFiles();
        for (File file2 : file) {//使用增强for进行遍历
			System.out.println(file2);
		}
      
    }
}

 

综合练习

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

public class test {
    public static void main(String [] args) throws IOException {
    	//先创建父级路径文件夹aaa
    	File f=new File("aaa");
    	f.mkdirs();//创建文件夹
    	String t="a.txt";
        File file=new File(f,t);//将父级路径和子级路径拼接
        boolean b=file.createNewFile();
        if(b) {
        	System.out.println("创建成功");
        }else {
        	System.out.println("创建失败");
        }
    }

	
}

2.定义一个方法找某个一个文件夹中,是否有def结尾的文件。

public class test {
    public static void main(String [] args) throws IOException {
    	File f1=new File("D:\\Date\\eee");
    	boolean b=find(f1);
    	System.out.println(b);
    }

	public static boolean find(File file) {
	
		File[] files=file.listFiles();//先把文件放入一个数组中,再进行遍历
		for(File f:files) {
			if(f.isFile()&&f.getName().endsWith(".def")) {
				return true;
			}
		}
		return false;
	}
}

3.找到电脑中D盘所有以def结尾的文件(考虑子文件夹)

分析:需要先遍历D盘,得到D盘的文件或文件夹,然后再依次遍历其中的文件或文件夹。此时需要递归的方法。

public class test {
    public static void main(String [] args)  {
    	File f=new File("D:\\");
    	find(f);
	}
    //查找方法
    public static void find(File file) {
    File[] files=file.listFiles();
    if(files!=null) {
    for(File f : files) {//遍历
	if(f.isFile()) {//f为文件
		if(f.getName().endsWith("def")) {
			System.out.println(f);
		}
	}else {//若f为文件夹,需再进行遍历
		find(f);
	}
     }
    }
    }
}

4.删除多级文件夹

分析:先删除文件夹中的内容,再删除自己。因为有多个文件夹,所以也使用递归方法。

public class test {
    public static void main(String [] args)  {
    	File f=new File("D:\\Date\\ggg");
    	delet(f);
	}
    //删除有内容的文件夹
    //先进入文件夹,再删除文件,
    public static void delet(File file) {
       File[] files=file.listFiles();
       for(File f:files) {//遍历文件夹
    	   if(f.isFile()) {
    		   f.delete();
    	   }else {
    		   delet(f);
    	   }
       }
       file.delete();//文件夹中无内容后将自己删掉
    }
}

5.统计文件夹的大小(其实就是文件夹中各个文件的大小)

分析:也用到了递归思想。

public class test {
    public static void main(String [] args)  {
    	File src=new File("D:\\Date\\aaa");
    	long len=getLen(src);
    	System.out.println(len);
	}
    //统计文件夹长度
    public static long getLen(File file) {
    	long len=0;
    	File[] files=file.listFiles();
    	for(File f:files) {
    		if(f.isFile()) {
    			len+=f.length();
    		}else {
    			len+=getLen(f);
    		}
    	}
    	return len;
    }
  
}

6.统计一个文件夹中的每种文件的个数并打印(考虑子文件夹),打印格式例如:txt:3个、doc:5个等等格式。

分析:利用File、递归、Map集合(键值对,键:文件名,值:个数)

1)先创建Map集合用来存放遍历文件的文件名和个数

2)if:先进入文件,遍历文件,判断是否为文件还是文件夹,利用getName()获取文件名字name,利用split()分割文件,成为数组。(例如:a.txt (a为arrr[0],txt为arr[1]))

 3)判断数组长度,长度小于2为没有后缀,不进入存储到集合中。

4)获取文件后缀名(txt/doc等等),判断后缀名是否存在于map集合中,若存在,获取此后缀名的值进行加加,然后存放到集合中,若不存在,则直接存放到集合中。

5)else:若进入的是文件夹,利用递归,创建一个新的sonmap集合,此集合已经遍历了文件夹中的文件,需要将此文件和个数加入到map中。

6)利用entryset遍历,获取键和值,将键与map集合比较,若存在,则获取map集合中的值,将map的值和sonmap的值相加,再存放到map中,若不存在,则直接存放到map中。

public class test {
    public static void main(String [] args)  {
    	File src=new File("D:\\Date\\aaa");
    	HashMap<String, Integer> hm=getcount(src);
    	System.out.println(hm);
	}
    //统计文件的个数
    //因为要输出(文件名=个数)所以用到了map集合的键值对
    public static HashMap<String, Integer> getcount(File file) {
    	HashMap<String, Integer> hm=new HashMap<>();
    	//进入文件夹
    	File[] files=file.listFiles();
    	for(File f:files) {
    		if(f.isFile()) {//文件
    			String name=f.getName();//先获取文件名字
    	        String[]str=name.split("\\.");//例如:t.txt,获取这个,才能获取键值对
    	        if(str.length>=2) {//防止没有后缀的文件,不加入集合中
    	        	//判断集合中是否存在这个键,存在:值加加;不存在:加入集合
    	        	String endname=str[str.length-1];//防止a.a.txt出现
    	        	if(hm.containsKey(endname)) {
    	        		//存在
    	        		int count=hm.get(endname);
    	        		count++;
    	        		hm.put(endname, count);
    	        	}else {
    	        		//不存在
    	        		hm.put(endname, 1);
    	        	}
    	        }
    		}else {//文件夹,递归
    			//若文件夹递归进去获得文件,但文件个数并未累加到map中
    			//需要在建立一个sonhm表示hm的子map
    			HashMap<String, Integer>sonhm=getcount(f);
    			//现在的sonhm中有遍历到的(文件名和个数)
    			//需要遍历sonhm
    		 Set<Entry<String, Integer>>entries=sonhm.entrySet();
    		 for(Entry<String, Integer>set:entries) {
    			String key=set.getKey();
    		    Integer value=set.getValue();
    		    //判断key在hm中是否存在
    		    if(hm.containsKey(key)){
    		    	//存在
    		    	int count=hm.get(key);
    		    	count=count+value;//将hm中的值和sonhm中的值相加
    		    	hm.put(key, count);
    		    }else {
    		    	//不存在
    		    	hm.put(key, 1);
    		    }
    		 }
    			
    		}
    	}
    	return hm;
    }
  
}

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

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

相关文章

每日一题——力扣141. 环形链表(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 专业点评 时间复杂度分析 空间复杂度分析 总结 我要更强 方法2&#x…

cdo | 常用命令

整理一下平时经常会使用的cdo命令 如何来更改netcdf数据中的变量名呢&#xff1f; 假设我现在有一个sst月平均数据,希望将里面的变量名称sst修改为sst_new netcdf oisst_monthly { dimensions:lat 180 ;lon 360 ;time UNLIMITED ; // (476 currently)nbnds 2 ; variable…

V90 PN总线伺服通过FB285速度控制实现正弦位置轨迹运动(解析法和数值法对比测试)

V90总线伺服相关内容请参考专栏系列文章,这里不在详述 1、V90伺服PN总线速度随动控制 V90伺服PN总线速度随动控制(手摇轮功能)_手摇轮可以接总线plc吗?-CSDN博客文章浏览阅读632次。V90PN总线控制相关内容,请参考下面文章链接:博途1200/1500PLC V90 PN通信控制 (FB284功能…

【html】用html模拟微信布局

您做的这个模拟微信布局的作品很不错,使用了Flexbox布局来实现元素的灵活排列。以下是关于您代码的一些分析和建议: 效果图: 代码分析: 全局样式重置: 您使用了* { margin: 0; padding: 0; }来重置所有元素的边距。这是一个常见的做法,可以避免不同浏览器默认样式的差…

ARM32开发——LED点灯

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 点灯的两种方式灌入电流法输出电流法扩展板点灯点灯方式点亮LED1-4完整实现 点灯的两种方式 不同颜色LED&#xff0c;达到相同亮度…

LLM Agent提效揭秘4:多智能体协作工作流深度剖析

在此之前&#xff0c;我们已经从论文到代码深度解读了吴恩达&#xff1a;GPT-4Agents Workflow&#xff0c;性能比肩GPT-5的三种大语言模型Agent工作流&#xff1a;反思、工具使用和规划。今天我们将深入最后一种Agent工作流&#xff1a;多智能体协作工作流。 想象一个未来&am…

3.spring源码:refresh()第一个方法prepareRefresh()

重点: 1.了解prepareRefresh()方法的作用:就是为容器刷新做了准备工作 2.整体了解refresh()方法 synchronized加锁的原因:刷新和销毁( "refresh" and "destroy" 都是一个完整的过程,需要加锁 改方法进入可以看到是空的,是为了扩展用的 该方法我们可以自己重…

visual studio code 全局搜索

VScode写代码的时候&#xff0c;会经常性的需要进行查找代码&#xff0c;那么怎么在Visual Studio Code中进行查找呢&#xff0c;下面就来大家vscode全局搜索的方法。 想要在vscode全局搜索进行全局搜索&#xff0c;使用快捷键CTRLSHIFTF即可进行搜索&#xff0c;也可以在左边…

GSM信令流程(附着、去附着、PDP激活、修改流程)

1、联合附着流程 附着包括身份认证、鉴权等 2、去附着流程 用户发起去附着 SGSN发起去附着 HLR发起去附着 GSSN使用S4发起去附着 3、Activation Procedures(PDP激活流程) 4、PDP更新或修改流程 5、Deactivate PDP Context 6、RAU(Routeing Area Update)流程 7、鉴权加…

NATS-研究学习

NATS-研究学习 文章目录 NATS-研究学习[toc]介绍说明提供的服务内容各模式介绍测试使用发布订阅&#xff08;Publish Subscribe&#xff09;请求响应&#xff08;Request Reply&#xff09;队列订阅&分享工作&#xff08;Queue Subscribers & Sharing Work&#xff09;…

vue+vant移动端显示table表格加横向滚动条

vant移动端显示table效果&#xff0c;增加复选框&#xff0c;可以进行多选和全选。加横向滚动条&#xff0c;可以看全部内容。 <template><div class"app-container"><div class"nav_text" style"position: relative;"><…

简单介绍QKeySequenceEdit的使用

QKeySequenceEdit是Qt框架中的一个便捷用户界面组件&#xff0c;用于输入和显示键盘快捷键。它提供了一个简单的界面&#xff0c;允许用户输入一个键盘快捷键&#xff0c;并将其显示为一个字符串。这在需要配置快捷键的应用程序中非常有用。在本文中&#xff0c;我们将详细介绍…

【C++】——string模拟实现

前言 string的模拟实现其实就是增删改查&#xff0c;只不过加入了类的概念。 为了防止与std里面的string冲突&#xff0c;所以这里统一用String。 目录 前言 一 初始化和销毁 1.1 构造函数 1.2 析构函数 二 迭代器实现 三 容量大小及操作 四 运算符重载 4.1 bool…

二叉树的顺序实现-堆

一、什么是堆 在数据结构中&#xff0c;堆&#xff08;Heap&#xff09;是一种特殊的树形数据结构&#xff0c;用数组存储&#xff0c;通常被用来实现优先队列。 堆具有以下特点&#xff1a; 堆是一棵完全二叉树&#xff08;Complete Binary Tree&#xff09;&#xff0c;即…

uni-app的网络请求库封装及使用(同时支持微信小程序)

其实uni-app中内置的uni.request()已经很强大了&#xff0c;简单且好用。为了让其更好用&#xff0c;同时支持拦截器&#xff0c;支持Promise 写法&#xff0c;特对其进行封装。同时支持H5和小程序环境&#xff0c;更好用啦。文中给出使用示例&#xff0c;可以看到使用变得如此…

算法(六)计数排序

文章目录 计数排序技术排序简介算法实现 计数排序 技术排序简介 计数排序是利用数组下标来确定元素的正确位置的。 假定数组有10个整数&#xff0c;取值范围是0~10&#xff0c;可以根据这有限的范围&#xff0c;建立一个长度为11的数组。数组下标从0到10&#xff0c;元素初始…

智慧校园有哪些特征

随着科技的飞速进步&#xff0c;教育领域正经历着一场深刻的变革。智慧校园&#xff0c;作为这场变革的前沿代表&#xff0c;正在逐步重塑我们的教育理念和实践方式。它不仅仅是一个概念&#xff0c;而是一个集成了物联网、大数据、人工智能等先进技术的综合生态系统&#xff0…

Nginx(openresty) 开启目录浏览 以及进行美化配置

1 nginx 安装 可以参考:Nginx(openresty) 通过lua结合Web前端 实现图片&#xff0c;文件&#xff0c;视频等静态资源 访问权限验证&#xff0c;进行鉴权 &#xff0c;提高安全性-CSDN博客 2 开启目录浏览 location /file{alias /data/www/; #指定目录所在路径autoindex on; …

差旅游记|绵阳印象:与其羡慕他人,不如用力活好自己。

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 来绵阳之前同事就问: “雷工&#xff0c;能吃辣嘛&#xff1f;”。 “还行&#xff0c;能吃点辣。” “那你去了四川别说能吃点辣&#xff0c;那边的能吃点比跟你说的能吃点不太一样” 01 你好 今天打车&#xff0c;上…

信息学奥赛初赛天天练-17-阅读理解-浮点数精准输出与海伦公式的巧妙应用

PDF文档公众号回复关键字:20240531 1 2023 CSP-J 阅读程序1 阅读程序&#xff08;程序输入不超过数组成字符串定义的范围&#xff1a;判断题正确填√&#xff0c;错误填&#xff1b;除特殊说明外&#xff0c;判断题1.5分&#xff0c;选择题3分&#xff0c;共计40分&#xff0…