Day18学习Java

File - 文件类

File,是文件和目录路径名的抽象表示。
File只关注文件本身的信息,而不能操作文件里面的内容。

File类 – 表示文件或文件夹,不能对文件里的数据进行操作。
对文件里的数据进行操作的是:IO流。
需求1:通过程序,获取已知文件的以下信息:

public static void main(String[] args){File file = new File("C:\\Users\\何小宝\\Desktop\\hhy.txt");System.out.println("获取文件名:" + file.getName());System.out.println("获取路径:" + file.getAbsolutePath());System.out.println("获取是否可读:" + file.canRead());System.out.println("获取是否可写:" + file.canWrite());System.out.println("获取是否隐藏:" + file.isHidden());System.out.println("获取文件大小(字节):" + file.length());SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String datetime = sdf.format(file.lastModified());System.out.println("获取文件最后修改时间:" + datetime);
}

相对路径 和 绝对路径

绝对路径:指定盘符的路径
相对路径:相对于项目下的路径

public static void main(String[] args) {File file = new File("hhy.txt");//hhy.txtSystem.out.println("获取相对路径:" + file.getPath());//D:\2402workspace\Day23\hhy.txtSystem.out.println("获取绝对路径:" + file.getAbsolutePath());	
}

File类

需求2:通过程序,判断指定路径的文件是否存在,如果不存在,则创建该文件。

下面按各种情况来解决该问题

1)目录已存在的情况

public static void main(String[] args) throws IOException {File file = new File("file01//hhy.txt");if(!file.exists()){//判断文件是否存在//创建文件file.createNewFile();}	
}

2)有一个层级的目录不存在的情况

public static void main(String[] args) throws IOException {File file = new File("file01//hhy.txt");//获取父路径的file对象 -- file01File parentFile = file.getParentFile();if(!parentFile.exists()){//判断目录路径是否存在//创建一层目录parentFile.mkdir();}if(!file.exists()){//判断文件是否存在//创建文件file.createNewFile();}
}

3)有多个层级的目录不存在的情况

public static void main(String[] args) throws IOException {File file = new File("file01//file02//file03//hhy.txt");//获取父路径的file对象 -- file01//file02//file03File parentFile = file.getParentFile();if(!parentFile.exists()){//判断目录路径是否存在//创建多层目录parentFile.mkdirs();}if(!file.exists()){//判断文件是否存在//创建文件file.createNewFile();}	
}

需求3:输出指定目录下的所有文件信息(只考虑当前目录,不考虑子目录)

public static void main(String[] args) {File file = new File("D:\\2023");//获取当前路径下所有的文件名
//	String[] list = file.list();
//	for (String str : list) {
//		System.out.println(str);
//	}//获取当前路径下所有的file对象File[] listFiles = file.listFiles();for (File f : listFiles) {System.out.println(f.getName() + " -- " + f.canRead() + " -- " + f.canWrite());}
}

1)要求只输出文件后缀名为txt的文件

public static void main(String[] args) {File file = new File("D:\\2023");//获取当前路径下所有的文件名
//	String[] list = file.list();
//	for (String str : list) {
//		if(str.endsWith(".txt")){
//			System.out.println(str);
//		}
//	}//获取当前路径下所有的file对象File[] listFiles = file.listFiles();for (File f : listFiles) {String name = f.getName();if(name.endsWith(".txt") && f.isFile()){System.out.println(name);}}
}

2)根据API的过滤器来完成该功能

public static void main(String[] args) {File file = new File("D:\\2023");File[] listFiles = file.listFiles(new FilenameFilter() {//底层逻辑:遍历当前目录所有的file对象,返回true就添加到listFiles数组中,返回false就不管@Overridepublic boolean accept(File dir, String name) {//D:\\2023 + \\ + 文件名File f = new File(dir, name);String n = f.getName();if(n.endsWith(".txt") && f.isFile()){return true;}return false;}});for (File f : listFiles) {System.out.println(f.getName());}
}

3)需求继续跟进,列出当前目录及子目录中符合该条件的文件信息(递归)

public static void main(String[] args) {File file = new File("D:\\2023");method(file, ".txt");
}public static void method(File file,String suffix){File[] listFiles = file.listFiles();for (File f : listFiles) {if(f.isDirectory()){//文件夹method(f, suffix);}else if(f.isFile()){//文件String name = f.getName();if(name.endsWith(suffix)){System.out.println(name + " -- " + f.getAbsolutePath());}}}	
}

利用 文件字节输出流 向文件写入数据

1)不处理异常的方式
2)文件存在的情况

public static void main(String[] args) throws IOException {//1.创建流对象FileOutputStream fos = new FileOutputStream("hhy.txt");//2.写入数据//fos.write(97);//写入Unicode码//fos.write("123abc".getBytes());//写入字节数组fos.write("123abc".getBytes(), 1, 3);//写入字节数组,偏移量,写入长度//3.关闭资源fos.close();	
}

3)在末尾追加
经验:考虑基础流的构造方法
4)文件不存在的情况
经验:所有的输出流,当文件不存在时都会先创建该文件,再写入数据
5)处理异常的方式

public static void main(String[] args) {FileOutputStream fos = null;try {//1.创建流对象fos = new FileOutputStream("hhy.txt",true);//2.写入数据fos.write("123abc".getBytes());//写入字节数组} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {//3.关闭资源if(fos != null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}}
}

利用 文件字节输入流 读取文件里的数据

1)不处理异常的方式
2)文件存在的情况

public static void main(String[] args) throws IOException {//1.创建流对象FileInputStream fis = new FileInputStream("hhy.txt");//2.读取数据//read():读取一个字节,读取到文件末尾返回-1int read = fis.read();System.out.println((char)read);read = fis.read();System.out.println((char)read);read = fis.read();System.out.println((char)read);read = fis.read();System.out.println((char)read);read = fis.read();System.out.println((char)read);read = fis.read();System.out.println((char)read);read = fis.read();System.out.println(read);//3.关闭资源fis.close();	
}
public static void main(String[] args) throws IOException {//1.创建流对象FileInputStream fis = new FileInputStream("hhy.txt");//2.读取数据//read():读取一个字节,读取到文件末尾返回-1int read;while((read = fis.read()) != -1){System.out.println((char)read);}//3.关闭资源fis.close();
}
public static void main(String[] args) throws IOException {//1.创建流对象FileInputStream fis = new FileInputStream("hhy.txt");//2.读取数据//read(bs):读取bs数组长度的数据并把数据存入数组中,返回读取到的有效字节数。如果读取到文件末尾,则返回-1byte[] bs = new byte[1024];//[0,0,0,0,0,0,....]int len;len = fis.read(bs);System.out.println(new String(bs, 0, len));//3.关闭资源fis.close();	
}

3)文件不存在的情况
经验:
所有的输出流,当文件不存在时都会先创建该文件,再写入数据
所有的输入流,当文件不存在时都会报错 - FileNotFoundException
4)处理异常的方式

public static void main(String[] args) {FileInputStream fis = null;try {//1.创建流对象fis = new FileInputStream("hhy.txt");//2.读取数据//read(bs):读取bs数组长度的数据并把数据存入数组中,返回读取到的有效字节数。如果读取到文件末尾,则返回-1byte[] bs = new byte[1024];//[0,0,0,0,0,0,....]int len;while((len = fis.read(bs)) != -1){System.out.println(new String(bs, 0,len));}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally{//3.关闭资源if(fis != null){try {fis.close();} catch (IOException e) {e.printStackTrace();}}}	
}

拷贝文件

思路:读取源文件,写入目标文件

public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("源文件.mp4");FileOutputStream fos = new FileOutputStream("copy.mp4");int read;while((read = fis.read()) != -1){fos.write(read);}fis.close();fos.close();
}
public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("源文件.mp4");FileOutputStream fos = new FileOutputStream("copy.mp4");byte[] bs = new byte[1024];int len;while((len = fis.read(bs)) != -1){fos.write(bs, 0, len);}fis.close();fos.close();
}
public static void main(String[] args) {FileInputStream fis = null;FileOutputStream fos = null;try {fis = new FileInputStream("源文件111.mp4");fos = new FileOutputStream("copy.mp4");byte[] bs = new byte[1024];int len;while((len = fis.read(bs)) != -1){fos.write(bs, 0, len);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if(fis != null){try {fis.close();} catch (IOException e) {e.printStackTrace();}}if(fos != null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}}	
}
public static void main(String[] args) {try(FileInputStream fis = new FileInputStream("源文件.mp4");FileOutputStream fos = new FileOutputStream("copy.mp4");) {byte[] bs = new byte[1024];int len;while((len = fis.read(bs)) != -1){fos.write(bs, 0, len);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} 	
}

利用 带缓冲区的字节输出流 向文件写入数据

1)不处理异常的方式

2)文件存在的情况

3)在末尾追加

​ 经验:考虑基础流的构造方法

4)文件不存在的情况

​ 经验:所有的输出流,当文件不存在时都会先创建该文件,再写入数据

5)处理异常的方式

public static void main(String[] args) throws IOException{//1.创建流对象//BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("hhy.txt"));//1.创建流对象 + 末尾追加//BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("hhy.txt",true));//1.创建流对象 + 自定义长度BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("hhy.txt"),2048);//2.写入数据bos.write("123abc".getBytes());bos.write("123abc".getBytes());//3.关闭资源bos.close();
}

利用 带缓冲区的字节输入流 读取文件里的数据

1)不处理异常的方式
2)文件存在的情况

3)文件不存在的情况

​ 经验:

​ 所有的输出流,当文件不存在时都会先创建该文件,再写入数据

​ 所有的输入流,当文件不存在时都会报错 - FileNotFoundException

4)处理异常的方式

public static void main(String[] args) throws IOException {//1.创建流对象//BufferedInputStream fis = new BufferedInputStream(new FileInputStream("hhy.txt"));//1.创建流对象 + 自定义缓冲区大小BufferedInputStream fis = new BufferedInputStream(new FileInputStream("hhy.txt"),2048);//2.读取数据byte[] bs = new byte[1024];int len;while((len = fis.read(bs)) != -1){System.out.println(new String(bs, 0, len));}//3.关闭资源fis.close();
}

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

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

相关文章

Unity 权限 之 Android 【权限 动态申请】功能的简单封装

Unity 权限 之 Android 【权限 动态申请】功能的简单封装 目录 Unity 权限 之 Android 【权限 动态申请】功能的简单封装 一、简单介绍 二、Android 权限 动态申请 三、实现原理 四、注意事项 五、案例实现简单步骤 附录: 一、进一步优化 二、多个权限申请…

第三方软件检测机构要具备哪些资质要求?专业测试报告如何申请?

第三方软件检测机构是独立于软件开发商和用户之外的公正机构,负责对软件进行全面的检测和评估。其独立性保证了评测结果的客观性和公正性,有效避免了软件开发商对自身产品的主观偏见和误导。 要成为一家合格的第三方软件检测机构,需要具备一…

网络编程——多进程的服务器

多进程的网络服务器 多进程的网络服务器是一种使用多个进程来处理并发网络请求的服务器架构。在这种架构中,服务器在接收到客户端连接请求后,会创建一个新的子进程来处理该请求,从而允许服务器同时处理多个客户端连接。多进程服务器通常用于…

OKR 实践:来自一位信息技术部主管的成功秘诀

OKR 实践:来自一位信息技术部主管的成功秘诀 为什么选择OKR 公司信息技术部为38个各地分公司、12,000名员工的IT需求提供服务。庞大而多样的客户群常常使我们的团队分散,许多团队都在各自为政,以个案为基础解决问题,而不是采用企业…

线上监控诊断利器:Arthas,你值得拥有

1. 引言 在现代软件开发中,线上监控和诊断是确保应用稳定性和性能的关键环节。然而,对于Java开发者来说,传统的监控工具往往难以深入到代码层面进行实时分析。这正是Arthas这一线上监控诊断工具大展身手的地方。本文将深入探讨Arthas&#x…

LabVIEW高低温试验箱控制系统

要实现LabVIEW高低温试验箱控制系统,需要进行硬件配置、软件设计和系统集成,确保LabVIEW能够有效地监控和控制试验箱的温度。以下是详细说明: 硬件配置 选择合适的试验箱: 确定高低温试验箱的型号和品牌。 确认试验箱是否支持外…

摸鱼大数据——Hive表操作——文件数据的导入和导出

数据导入和导出 1、文件数据导入 1.1 直接上传文件 window页面上传 需求: 已知emp1.txt文件在windows/mac系统,要求使用hdfs保存此文件 并且使用hivesql建表关联数据 use day06; ​ -- 1- 创建Hive表 create table emp1 (id int,name string,salary int,dept string )row for…

基于51单片机的汽车智能灯光控制系统

一.硬件方案 本设计硬件部分,中央处理器采用了STC89C52RC单片机,另外使用两个灯珠代表远近光灯,感光部分采用了光敏电阻,因为光敏电阻输出的是电压模拟信号,单片机不能直接处理模拟信号,所以经过ADC0832进…

基于python flask +pyecharts实现的气象数据可视化分析大屏

背景 气象数据可视化分析大屏基于Python Flask和Pyecharts技术,旨在通过图表展示气象数据的分析结果,提供直观的数据展示和分析功能。在当今信息化时代,气象数据的准确性和实时性对各行业具有重要意义。通过搭建气象数据可视化分析大屏&…

Vue 3 教程:入门指南

Vue 3 教程:入门指南 Vue 3 教程:入门指南 Vue 3 教程:入门指南引言1. 初始化项目2. 响应式数据使用 ref使用 reactive 3. 计算属性4. 侦听器5. 组合式 API6. 总结 引言 Vue.js 是一个用于构建用户界面的渐进式框架。Vue 3 引入了许多新的特…

Qt子线程更新UI的一种新玩法

目录 1. 说明2. 场景3. 子线程更新UI的方法3.1 一般做法3.2 新玩法 1. 说明 Qt不允许子线程直接操作主线程UI,推荐的做法是,子线程发送信号,主线程响应该信号。其最终的效果,依旧不是子线程直接操作主线程UI。 2. 场景 假设现在…

【kubernetes】关于k8s集群如何将pod调度到指定node节点(亲和与反亲和等)

目录 一、调度约束 1.1K8S的 List-Watch 机制 ⭐⭐⭐⭐⭐ 1.1.1Pod 启动典型创建过程 二、调度过程 2.1Predicate(预选策略) 常见的算法 2.2priorities(优选策略)常见的算法 三、k8s将pod调度到指定node的方法 3.1指定…

Validated的分组校验和自定义校验注解

1. Validated的分组校验 1.1 简介 Validated的分组校验是指根据不同的校验规则对同一个实体类进行不同的校验。这在实际开发中非常常见,比如在新增和更新操作中,可能有不同的校验规则。 1.2 使用方法 在实体类中,我们可以利用javax.va…

幂等性解决方案

1、幂等性 在计算机中,表示对【同一个过程】应用【相同的参数】多次和应用一次产生的效果是一样,这样的过程即被称为满足幂等性。 幂等: update user set age 25 where user_id2这中情况无论执行多少次,结果都不受影响&#x…

Java | Leetcode Java题解之第103题二叉树的锯齿形层序遍历

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> ans new LinkedList<List<Integer>>();if (root null) {return ans;}Queue<TreeNode> n…

Go 使用bcrypt实现密码加密和和校验

在Go语言中&#xff0c;使用bcrypt算法进行密码的加密和校验是一种常见的做法&#xff0c;因为bcrypt算法可以提供强大的密码安全性。 bcrypt可以用于数据库中的用户密码保存&#xff0c;相比md5而言更加的安全可靠 文档 https://pkg.go.dev/golang.org/x/crypto/bcrypt 文档…

SYD881X HID工程重连后连接参数没有更新功耗下不来

SYD881X HID工程重连后连接参数没有更新功耗下不来 现在测试到一个问题,第一次连接上的时候过一段时间功耗会下来到100UA以内,这个是正常的,但是关掉手机蓝牙再打开手机蓝牙就发现功耗是500UA左右下不来了! 抓包发现第一次连接和重连的时候手机给的连接参数是一样的: 问题是当…

电力电子技术03 (1)---电路稳态分析方法

学习来源&#xff08;只用于个人学习笔记&#xff0c;建议对着老师视频学习理解更深入&#xff09;&#xff1a;2.2稳态分析的基本方法_哔哩哔哩_bilibili 一、Buck降压电路 Buck电路&#xff0c;也称为降压转换器&#xff0c;是一种DC-DC电压转换器&#xff0c;用于将输入电…

PHP精度处理

一、问题缘由 PHP 服务接收前端传过来的单价(字符串形式)和数量&#xff0c;把单价转成分(单价*100)&#xff0c;然后传给下游的 Golang 服务&#xff0c;不过最后从两个服务日志中发现金额相差 1。 以下为前端传的 {"amount": 4,"price": "9.2&qu…

代码随想录算法训练营第四十六天||139.单词拆分

一、139.单词拆分 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict&#xff0c;判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明&#xff1a; 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 1&#xff1a; 输入: s …