论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
javaEE————文件IO(1)
javaEE————文件IO(1)
宁睿
论坛元老
|
2025-3-19 08:30:55
|
显示全部楼层
|
阅读模式
楼主
主题
1038
|
帖子
1038
|
积分
3124
上期我们彻底学完多线程啦,接下来的内容暂时轻松一点,我们要学习对文件的操作;
文件操作和IO
1,认识文件
什么是文件呢,文件分为广义的文件和狭义的文件;
狭义的文件指生存在硬盘上的文件;
广义的文件指操作系统进行资源管理的一种机制,很多的软件或者硬件资源抽象成“文件”来体现;
我们今天主要讨论狭义的文件,
我们使用计算机的时间通常管这个叫文件夹,这个这个不是专业的叫法这个是目次(directory);
里面有目次或者是文件,也可以为空,它还有一些除了内容以外的信息:
1)树形结构组织 和 目次
文件的引出带来了很大的便利,但是随着文件的内容越来越多,我们怎么管理这些文件呢,我们也不能直接把这些文件堆在一堆呀,我们就使用了树形结构来存储我们的文件,
我们看这个java地面知识点;
一个目次包含很多目次,我们找到此中一个目次,并进入到这个目次,我们还能看到很多目次,就像我们学习的多叉树一样;
2)文件路径(Path)
这么复杂的结构,那么我们是怎么准确搜索到我们要找到的文件呢,比如刚才的图片,算了我们新弄一个图片
我们在当前路径中放了一个新的图片,
"C:\cctalk\java代码容易犯错的知识点\QQ截图20240915161600.png"
我们复制文件的地址,这个就是当前图片的
绝对路径
,什么是绝对路径呢,就从从c盘开始,直接到当前文件的全部路径;
除此之外还有
相对路径
,相对路径必要描述一个基准路径,什么是基准路径呢,我们在用基准路径找一下这张图片:
基准路径:C:\cctalk
我们这时间有了基准,我们此时再去找图片只必要:
.\java代码容易犯错的知识点\QQ截图20240915161600.png
就能找到这个图片了,.的意思就是在当前目次,..的意思就是去该目次的父亲目次,但是我们是不可以去爷爷目次的,也就是父亲目次的父亲目次,
有了路径呢,我们就能轻松的找到我们想要的数据了;
3)知识增补
我们来聊一聊文件的种类,文件分为
二进制文件
和
文本文件
;
冯诺依曼,我们的祖师爷,之情定过规矩,就是全部的文件都是二进制的,计算机组成原理讲过,由于0和1搭配的组合不多,很好控制,有一些文件很特殊二进制数据刚好能够构成一个一个字符,各人还记得一个汉字占几个字节吗,说详细数量的都拉出去枪毙嗷,应该要有一个编码规则,utf8就是3个字节,utf16就为2个个字节,utf32为4个字节,还有很多其他的编码方式,文本文件呢,就是对二进制文件自行查码表,将二进制数据翻译为文本文件;
图片,视频,音乐等可执行程序都是二进制文件,而java.c,TxT纯文本,都是文本文件,像word,docx(富文本)也都是二进制文件;
还有dll是动态库,通常是文件后缀;
2,java中文件操作
下面我们就来谈一谈java中的文件操作,我们分为
文件系统操作
和
文件内容操作
;
文件系统操作就比如创建目次,创建文件,删除和重命名等;
文件内容操作就是对一个文件的内容进行修改了;
我们这里主要讨论的是文件系统操作;
1)File概述
java通过java.io.File来对文件(目次)进行描述,但是也存在创建了File对象但是没有对应的文件;
1> 属性
修饰符及类型属性分析static String
pathSeparator
路径列表分隔符
(如 : 在 Linux/macOS,; 在 Windows),用于分隔多个路径(如 PATH 环境变量)。static char
pathSeparatorChar
同上,但以 char 类型体现。static String
separator
文件路径分隔符
(如 / 在 Linux/macOS,\ 在 Windows),用于分隔目次层级。static char
separatorChar
同上,但以 char 类型体现。 这个是啥意思呢,我刚开始学习的时间也没明确,这个是什么意思呢,为啥还要分为字符串和字符呢,我们写代码的时间都用/或者是转义\\两个斜杠,这个在不同的操作系统可能是不同的,我们为了包管跨平台的兼容性,使用pathSeparator和separator就能大大提高代码的移植性了;
public class Demo {
public static void main(String[] args) {
// 输出路径列表分隔符(如 ; 或 :)
System.out.println("Path Separator: " + File.pathSeparator); // String
System.out.println("Path Separator Char: " + File.pathSeparatorChar); // char
// 输出文件路径分隔符(如 \ 或 /)
System.out.println("File Separator: " + File.separator); // String
System.out.println("File Separator Char: " + File.separatorChar); // char
}
}
复制代码
属性还分了字符串和字符,字符串是为了更好的拼接,字符更底层,适合遍历;
2> 构造方法
署名
分析
File(String Parent,String child )
根据父目次(不是路径)+孩子文件夹路径构建一个新的File实例
File(String pathname)
根据文件路径创建一个File实例,File可以是绝对路径,也可以是相对路径
File(File parent,String child)
根据父目次路径+孩子文件夹路径构建一个新的File实例
3> 方法
修饰符及返回值类型
方法署名
分析
String
getParent()
返回File对象的⽗⽬录⽂件路径
String
getName()
返回FIle对象的纯⽂件名称
String
getPath()
返回File对象的⽂件路径
String
getAbsolutePath()
返回File对象的绝对路径
String
getCanonicalPath()
返回File对象的修饰过的绝对路径
我们来试一下:
我们先来试试绝对路径——
File file = new File("C:"+ File.separator+"ctalk/java代码容易犯错的知识点/test.txt");
System.out.println(file.getParent());
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getAbsoluteFile());
System.out.println(file.getCanonicalFile());
复制代码
运行:
我们再来试试相对路径:
File file = new File("./java代码容易犯错的知识点/test.txt");
System.out.println(file.getParent());
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getAbsoluteFile());
System.out.println(file.getCanonicalFile());
复制代码
boolean
exists()
判断File对象描述的⽂件是否真实 存在
boolean
isDirectory()
判断File对象代表的⽂件是否是⼀ 个⽬录
boolean
isFile()
判断File对象代表的⽂件是否是⼀ 个普通⽂件
boolean
createNewFile()
根据File对象,⾃动创建⼀个空⽂ 件。乐成创建后返回true
boolean
delete()
根据File对象,删除该⽂件。乐成 删除后返回true
void
deleteOnExit()
根据File对象,标注文件将要被删除,删除不会立刻执行,删除动作会在JVM运行结束后执行
我们来试试:
File file = new File("C:/cctalk/java代码容易犯错的知识点/test.txt");//此时test.txt是不存在的;
System.out.println(file.exists());//判断是否存在
复制代码
此时是没有这个文件的~
不存在;
我们再来创建出这个文件:
File file = new File("C:/cctalk/java代码容易犯错的知识点/test.txt");
System.out.println(file.exists());
复制代码
这次存在了;
File file = new File("C:/cctalk/java代码容易犯错的知识点/test.txt");
System.out.println(file.isDirectory());//判断是否为目录
System.out.println(file.isFile());//判断是否为文件
复制代码
我们创建的是文件test.txt;
再试试目次:
File file = new File("C:/cctalk/java代码容易犯错的知识点");
System.out.println(file.isDirectory());
System.out.println(file.isFile());
复制代码
ok了嗷;
我们再来试试用file创建一个文件
File file = new File("C:/cctalk/java代码容易犯错的知识点/test.txt");
System.out.println(file.createNewFile());
复制代码
这个呢,就是我们给的绝对路径和相对路径中不存在的test.txt,我们会把它创建出来;
这时java知识点中就出现了对应的文件:
我们再试试两个删除操作
File file = new File("C:/cctalk/java代码容易犯错的知识点/test.txt");
System.out.println(file.delete());
复制代码
删掉了;那么第二个删除操作是怎么样的,再jvm运行结束时删除怎么看到呀,我们来试试:
先创建出来,
File file = new File("C:/cctalk/java代码容易犯错的知识点/test.txt");
file.deleteOnExit();
while (true){
Thread.sleep(100);
System.out.println(111);
}
复制代码
来运行:
这时间看,主线程是在阻塞,我们看我们的test.txt文件发现是没有删除的;
我们结束代码:
这个文件就被删掉了;
String[]
list()
返回File对象代表的⽬录下的全部 ⽂件名
File[]
listFiles()
返回File对象代表的⽬录下的全部 ⽂件,以File对象表⽰
boolean
mkdir()
创建File对象代表的⽬录
boolean
mkdirs()
创建File对象代表的⽬录,如果必 要,会创建中间⽬录
boolean
renameTo(File dest)
进⾏⽂件改名,也可以视为我们平 时的剪切、粘贴操作
boolean
canRead()
判断⽤⼾是否对⽂件有可读权限
boolean
canWrite()
判断⽤⼾是否对⽂件有可写权限
我们在这里创建一个Demo,再在Demo中创建一些文件
我们把他们列出来:
File file = new File("C:/cctalk/java代码容易犯错的知识点/Demo");
String[] str = file.list();
for (String a: str){
System.out.println(a);
}
复制代码
都出来了,我们看看另一个listFiles:
File file = new File("C:/cctalk/java代码容易犯错的知识点/Demo");
File[] files = file.listFiles();
for (File a:files){
System.out.println(a);
}
复制代码
这个会直接输出绝对路径;
我们再来看下两个方法:
mkdir()和mkdirs()都是创建目次的方法;
第一个方法mkdir(),必须存在父目次才气创建,不会自动创建父目次;
File file = new File("C:/cctalk/java代码容易犯错的知识点/Demo/demo2");
System.out.println(file.mkdir());
复制代码
创建了demo2
试试第二个方法mkdirs();
File file = new File("C:/cctalk/java代码容易犯错的知识点/Demo/demo2/demo3/demo4");
System.out.println(file.mkdirs());
复制代码
我们看到即使我们没有demo3这一目次我们也乐成创建了,mkdirs会自动创建目次;
接下来renameTo方法,
这个方法可以重命名文件,还可以移动文件,由于本质是我们创建一个新的File来代替旧的file;
我们把这个test文件夹改名为hhhh:
File oldfile = new File("C:/cctalk/java代码容易犯错的知识点/Demo/demo2/demo3/demo4/test.txt");
File newfile = new File("C:/cctalk/java代码容易犯错的知识点/Demo/demo2/demo3/demo4/hhhh");
oldfile.renameTo(newfile);
复制代码
乐成改了,我们把这个文件移动到demo3中,
File oldfile = new File("C:/cctalk/java代码容易犯错的知识点/Demo/demo2/demo3/demo4/hhhh");
File newfile = new File("C:/cctalk/java代码容易犯错的知识点/Demo/demo2/demo3/hhhh");
oldfile.renameTo(newfile);
复制代码
把hhhh移动过来了;
还剩两个方法一个是canRead(),另一个是canWirte();
这个就是看用户有没有读和写的权限;
File file = new File("C:/cctalk/java代码容易犯错的知识点/Demo/demo2/demo3/hhhh");
System.out.println(file.canRead());
System.out.println(file.canWrite());
复制代码
读和写权限都有,那么我们怎么知道我们是否有读还是写的权限呢?
我们看到hhhh这里有这4个:
我们的canRead和canWrite就是这4个权限的并集,也就是说有一个有读权限canRead就有权限,write也一样;
下期带来文件内容操作;
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
宁睿
论坛元老
这个人很懒什么都没写!
楼主热帖
java前置学习
【RocketMQ】消息的存储
iOS Widget
简单的用Python对手机号进行加密 ...
【PostgreSQL】PostgreSQL重建与主库不 ...
k8s v-1.20版本部署详细过程[实测可用 ...
基于单片机的压力测控仿真设计(#0024) ...
❤️肝下25万字的《决战Linux到精通》 ...
Unity 将是驱动 C# 增长的引擎吗 ? ...
离线数仓建设,企业大数据的业务驱动与 ...
标签云
运维
CIO
存储
服务器
浏览过的版块
SQL-Server
鸿蒙
超融合
程序人生
Nosql
前端开发
分布式数据库
向量数据库
快速回复
返回顶部
返回列表