File(文件)

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.mfbz.cn/a/666313.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg 中 Filters 使用文档介绍

描述 这份文档描述了由libavfilter库提供的过滤器Filters、源sources和接收器sinks。 滤镜介绍 FFmpeg通过libavfilter库启用过滤功能。在libavfilter中,一个过滤器可以有多个输入和多个输出。为了说明可能的类型,我们考虑以下过滤器图: 这个过滤器图将输入流分成两个流,然…

Source Insight 变量高亮快捷键F8 失效

SourceInsight4.0&#xff0c;使用的时候&#xff0c;高亮快捷键F8突然不能用了 查半天发现&#xff0c;是用了“有道翻译”的原因&#xff0c;热键冲突&#xff0c;如下&#xff0c;把下面的热键换一个就好了

【第七节】C++的STL基本使用

目录 前言 一、STL简介 1.1 STL基本概念 1.2 STL六大组件 1.3 STL优点 二、STL三大组件 2.1 容器 2.2 算法 2.3 迭代器 三、STL常见的容器 3.1 string容器 3.1.1 string容器基本概念 3.1.2 string容器的常用操作 3.1.2.1 string 构造函数 3.1.2.2 string 基本赋…

【AVL Design Explorer DOE】

AVL Design Explorer DOE 1、关于DOE的个人理解2、DOE参考资料-知乎2.1 DOE发展及基本类型2.2 DOE应用场景2.3 Mintab 中的 DOE工具3、AVL Design Explorer DOE示例 1、关于DOE的个人理解 仿真和试验一样&#xff0c;就像盲人摸象&#xff0c;在不知道大象的全景之前&#xff…

SpringCloud学习笔记(一)

SpringCloud、SpringCloud Alibaba 前置知识&#xff1a; 核心新组件&#xff1a; 所用版本&#xff1a; 学习方法&#xff1a; 1.看理论&#xff1a;官网 2.看源码&#xff1a;github 一、微服务理论知识 二、关于SpringCloud各种组件的停更/升级/替换 主业务逻辑是&#x…

Mysql基础教程(11):DISTINCT

MySQL DISTINCT 用法和实例 当使用 SELECT 查询数据时&#xff0c;我们可能会得到一些重复的行。比如学生表中有很多重复的年龄。如果想得到一个唯一的、没有重复记录的结果集&#xff0c;就需要用到 DISTINCT 关键字。 MySQL DISTINCT用法 在 SELECT 语句中使用 DISTINCT 关…

jsmug:一个针对JSON Smuggling技术的测试PoC环境

关于jsmug jsmug是一个代码简单但功能强大的JSON Smuggling技术环境PoC&#xff0c;该工具可以帮助广大研究人员深入学习和理解JSON Smuggling技术&#xff0c;并辅助提升Web应用程序的安全性。 背景内容 JSON Smuggling技术可以利用目标JSON文档中一些“不重要”的字节数据实…

判断自守数-第13届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第75讲。 判断自守数&#…

发电机组故障的原因、解决方案及解决措施

发电机组故障的原因、解决方案及解决措施可以总结如下&#xff1a; 一、故障原因 供电中断 原因&#xff1a;电网故障、线路短路或电力负荷过重等。 燃油问题 原因&#xff1a;燃油供应系统问题&#xff0c;如燃油管路堵塞、燃油质量不佳等。 轴承过热 原因&#xff1a;轴承过…

Android 11 Audio音频系统配置文件解析

在AudioPolicyService的启动过程中&#xff0c;会去创建AudioPolicyManager对象&#xff0c;进而去解析配置文件 //frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp AudioPolicyManager::AudioPolicyManager(AudioPolicyClientInterface *clientIn…

19.1 简易抽奖

准备一个数组&#xff0c;里面添加10个奖品数据&#xff0c;让奖品数据快速的在盒子中随机显示&#xff0c;通过按钮控制盒子里面的内容停止。 效果图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

01-1.2.3 算法的空间复杂度

什么是空间复杂度&#xff1f; 代码在运行之前需要先装入内存&#xff0c;程序代码需要占一定的位置&#xff08;在这边假设是100B&#xff09; 定义的变量和参数i&#xff0c;n都需要占用内存空间 //算法一——逐步递增型 void loveYou(int n) { //n为问题规模int i 1; /…

红色文化VR虚拟线上云展馆将烈士纪念馆的宏伟全貌细致入微地呈现在您的眼前

在手机屏幕上轻轻滑动&#xff0c;即刻启程一场别开生面的线上打卡之旅。720全景线上展馆是深圳VR公司华锐视点运用先进的web3d开发和VR虚拟现实技术&#xff0c;将烈士纪念馆的宏伟全貌细致入微地呈现在您的眼前。 720全景线上展馆敢于打破时空的界限&#xff0c;带您回到那段…

618 购物指南:简单点 618 捡便宜,用这个利器就行

直接干货&#xff0c;看效果&#xff0c;安装脚本直接显示商家额外优惠券&#xff1a; 1、安装好脚本后&#xff0c;打开京东、淘宝(天猫) 商品详情页面&#xff0c;脚本会自动获取优惠券进行展示。 2、如果当前商品 处于 30 天最低价&#xff0c;脚本将自动进行标记 提醒&…

input输入框的一些复习

<template><div><div style"text-align: center;margin: 10px 0;"><span style"font-size: 15px;font-weight: bold;">input输入框的基本应用</span></div><el-descriptions :column"3" size"defau…

现如今AI大环境究竟怎样?

遇到难题不要怕&#xff01;厚德提问大佬答&#xff01; 厚德提问大佬答10 你是否对AI绘画感兴趣却无从下手&#xff1f;是否有很多疑问却苦于没有大佬解答带你飞&#xff1f;从此刻开始这些问题都将迎刃而解&#xff01;你感兴趣的话题&#xff0c;厚德云替你问&#xff0c;你…

VR导航的实现原理、技术优势和应用场景

VR导航通过虚拟现实技术提供沉浸式环境&#xff0c;结合室内定位技术实现精准导航。目前&#xff0c;VR导航已在多个领域展现出其独特的价值和潜力&#xff0c;预示着智能导航系统的未来发展。 一、实现原理 VR导航技术依托于虚拟现实(VR)和室内定位系统。VR技术利用计算机模…

鸿蒙ArkTS声明式开发:跨平台支持列表【透明度设置】 通用属性

透明度设置 设置组件的透明度。 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a; gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版…

Python深度学习基于Tensorflow(13)目标检测实战

文章目录 RPN 整体代码RPN 具体实现过程数据标注读取标注数据固定图片大小调整目标框使用预训练模型获取 feature_shape定义 RPN 网络生成RPN 的 CLS 和 REG 数据集获取所有的锚点计算锚点与目标框的IOU 定义 RPN loss 和 训练过程 参考资料 这里实现的是二阶段目标检测&#x…

【UE5:CesiumForUnreal】——加载无高度地形数据

目录 1.实现目的 2.数据准备 2.1下载数据 2.2 数据切片 3.加载无地形数据 1.实现目的 在CesiumForUnreal插件中&#xff0c;我们加载地图和地形图层之后&#xff0c;默认都是加载的带有高程信息的地形数据&#xff0c;在实际的项目和开发中&#xff0c;有时候我们需要加载无…