当前位置: 首页 > news >正文

文件操作和IO(上)

绝对路径和相对路径

文件按照层级结构进行组织(类似于数据结构中的树型结构),将专门用来存放管理信息的特殊文件称为文件夹或目录。对于文件系统中文件的定位有两种方式,一种是绝对路径,另一种是相对路径。

绝对路径:从树型结构的角度来看,树中的每个结点都可以被一条从树的根结点开始,并到达该结点的路径所描述,将这种描述方式称为文件的绝对路径(Absolute Path)。

相对路径:除了从根结点出发,也可以从任意结点出发来找到目标结点,这种描述方式称为相对路径(Relative Path),相对于当前结点的一条路径。

例如test.txt文件的路径,下述描述方式就是绝对路径,以树型结构为例,即从根结点 E: 开始,到目标结点 test.txt

"E:\code_java\Java_EE\test.txt"

绝对路径通常使用 ./ 和 ../ 来进行描述,./ 表示当前目录,../ 表示上级目录,如下所示:

如果此时我们在 Java_EE 目录下,此时:
./test.txt <==> E:/code_java/Java_EE/test.txt
../test.txt <==> E:/code_java/test.txt

文件系统操作 (Java中的File类)

文件系统操作包括创建文件、删除文件、创建目录,重命名等等,Java中通过 java.io.File 类来对一个文件/目录进行抽象的描述,但有File对象,不代表就真实存在该文件,例如下列操作:

File file = new File("E:/code_java/Java_EE/test.txt");

若Java_EE目录下没有test.txt,上述这行代码是可以执行的,创建出了 File 对象,但test.txt实际上是不存在,也就是说 File 对象存在,但真实文件不一定存在。

构造方法

Java 中 File 类的构造方法有以下三种,其中第二种方式用的比较多。

File(File parent, String child) // 根据⽗⽬录 + 孩⼦⽂件路径,创建⼀个新的 File 实例
File(String pathname) // 根据⽂件路径创建⼀个新的 File 实例,路径可以是绝对路径或者相对路径
File(String parent, String child) // 根据⽗⽬录 + 孩⼦⽂件路径,创建⼀个新的 File 实例,⽗⽬录⽤路径表⽰

File类常用方法

获取 File 类属性

包括获取当前所在目录、文件名、文件路径、绝对路径、相对路径

public static void main(String[] args) throws IOException {
//        File file = new File("E:\\code_java\\demo\\test.txt");// 绝对路径File file = new File("../test.txt");// 获取当前的目录System.out.println(file.getParent());// 获取文件名System.out.println(file.getName());// 获取路径System.out.println(file.getParent());// 获取绝对路径System.out.println(file.getAbsolutePath());// 获取File对象修饰过的绝对路径System.out.println(file.getCanonicalPath());}

其运行结果为:

针对获取相对路径方法 getCanonicalPath 方法输出结果的解释如下:

由于我们是在 JavaEE 文件夹下运行程序的,因此我们此时所在的目录为E:\code_java\Java_EE,此时我们创建的 File 类 file 对象路径为../test.txt,即上一级目录下的 test.txt 文件,即 getCanonicalPath 方法的输出 E:\code_java\test.txt。

如果此时我们将 File 构造方法的路径改为 ./test.txt,getCanonicalPath 方法的输出是 E:\code_java\Java_EE\test.txt

创建文件

在 Java 中创建文件使用 createNewFile 方法,对于文件创建操作,我们可以使用绝对路径来创建,也可以使用相对路径来操作,例如我们要在 E:\code_java\Java_EE 目录下创建一个 test.txt 文件具体操作如下:

 public static void main(String[] args) throws IOException {File file = new File("./test.txt"); // 方式1File file = new File("../Java_EE/test.txt"); // 方式2File file = new File("E:/code_java/Java_EE/test.txt"); // 方式3// 创建文件boolean ok = file.createNewFile();System.out.println(ok);// 是否存在System.out.println(file.exists());// 是否是文件System.out.println(file.isFile());// 是否是目录System.out.println(file.isDirectory());}

运行结果为:

第一个 true 表示我们成功创建了 test.txt 文件,第二个 true 表示当前文件存在,第三个 true 表示当前 File 对象是文件,false 表示当前 File 对象不是文件夹。

在 Java 中使用 createNewFile 创建文件需要进行异常处理,原因为:①硬盘空间不足;②用户权限不足(例如用户对于该文件夹只有读权限,无写权限),只有当用户有写权限时才会正常创建,否则就会抛出异常。

删除文件

在 Java删除文件,我们使用 delete 方法,对于文件的删除操作,与创建操作类似,我们可以通过绝对路径、相对路径对其删除,具体代码如下所示:

    public static void main(String[] args) {File file = new File("./test.txt");File file = new File("E:/code_java/Java_EE/test.txt");File file = new File("../Java_EE/test.txt");boolean ok = file.delete();System.out.println(ok);}

除了上述删除方式外,我们也可以通过 deleteOnExit 方法对文件进行删除,这种方式只有当进程结束时才进行文件删除操作,例如如下代码,我们使用 Scanner 来控制进程的结束:

    public static void main(String[] args) {// deleteOnExit 在进程退出的时候删除File file = new File("./test.txt");file.deleteOnExit();System.out.println("执行删除完毕");Scanner scan = new Scanner(System.in);scan.next();}

当程序运行起来后,用户任意输入一个内容即可结束进程,进程结束后也就将 test.txt 文件删除了,这就是 deleteOnExit 方法。

该方法存在的意义就是可以用来构造“临时文件”,就类似于我们在 word 中创建一个文档,此时在word 文档的同级目录下就会自动生成一个隐藏文档,一旦我们将当前编辑的文档关闭,这个隐藏文档就自动删除了。这个隐藏文件保存了我们当前正在修改而未保存的内容,当程序异常关闭时,这个文档并不会被删除,我们可以通过这个文档来还原我们正在编辑的文档。

打印目录内容

包括打印当前目录下的内容,当前目录下的内容以及当前目录下子目录的内容。

打印当前目录下的内容我们通过 list 方法来实现,具体代码如下:

public static void main(String[] args) {File file = new File(".");// 打印当前目录中的内容System.out.println(Arrays.toString(file.list()));}

如果我们想进一步打印当前目录的内容以及前目录下子目录的内容,可以利用 list 方法和 listFiles方法通过递归的方式来实现,具体代码如下:

private static void scan(File currentDir) {// 1. 先判断是否是目录if (!currentDir.isDirectory()) {return;}// 2. 列出当前目录中包含的内容File[] files = currentDir.listFiles();if (files == null || files.length == 0) {// 不存在的路径 / 空目录return;}// 3. 打印当前目录System.out.println(currentDir.getAbsolutePath());// 4.遍历这里所有的内容,依次进行判定for (File f : files) {if (f.isFile()) {// 如果是普通文件,直接打印文件路径System.out.println(f.getAbsolutePath());} else {// 如果是目录,就继续进行递归scan(f);}}}public static void main(String[] args) {File f = new File("./");scan(f);}

创建文件夹

在 Java 中创建文件夹,我们使用 mkdir 和 mkdirs 两种方法,mkdir 即创建一个文件夹,mkdirs 可以创建多个文件夹。

如果我们要在当前目录下创建一个 abc 文件夹,则可以通过下列代码实现:

    public static void main(String[] args) {File f = new File("./abc");boolean ok = f.mkdir();System.out.println(ok);}

 如果我们要在当前目录下创建一个 abc/def/ghi/jkl 文件夹,则可以通过下列代码实现:

    public static void main(String[] args) {File f = new File("./abc/def/ghi/jkl");boolean ok = f.mkdirs();System.out.println(ok);}

文件重命名和文件移动

在 Java 中,如果我们想要对文件进行重命名或者进行移动,可以通过 renameTo 方法来实现。

对文件重命名,将 abc 文件名改为 abc1234,具体代码如下:

    public static void main(String[] args) {File srcFile = new File("./abc");File deskFile = new File("./abc1234");boolean ok = srcFile.renameTo(deskFile);System.out.println(ok);}

如果我们想要移动文件的位置,例如我们想将 abc1234 文件夹下的 def 文件夹移动到当前目录 Java_EE 下,则可以通过以下代码实现,:

    public static void main(String[] args) {
//         对文件进行移动File srcFile = new File("./abc1234/def");File deskFile = new File("./def");boolean ok = srcFile.renameTo(deskFile);System.out.println(ok);}

 

相关文章:

  • L1-6、Prompt 与上下文的关系[特殊字符]
  • metasploit(2)生成dll木马
  • 基于 Spring Boot实现的图书管理系统
  • 龙虎榜——20250422
  • PyTorch与自然语言处理:从零构建基于LSTM的词性标注器
  • JavaScript的JSON处理Map的弊端
  • Spring Boot 应用优雅关闭
  • FLV 与 MP4 格式深度剖析:结构、原理
  • 【前端】【业务场景】【面试】在网页开发中,如何优化图片以提高页面加载速度?解决不同设备屏幕适配问题
  • 进阶篇 1:超越基准 - 指数平滑 (ETS) 模型详解
  • http通信之axios vs fecth该如何选择?
  • kubernetes》》k8s》》删除命名空间
  • element-ui cascader 组件源码分享
  • Redis—为何持久化使用子进程
  • dify工作流之text-2-e-sql,大模型写sql并执行
  • 《 C++ 点滴漫谈: 三十四 》从重复到泛型,C++ 函数模板的诞生之路
  • 【C++】vector<bool>特化
  • [二叉树]关于前序、中序、后序、层序序列
  • 【机器学习】决策树算法中的 “黄金指标”:基尼系数深度剖析
  • w~视觉~3D~合集2
  • 特朗普:泽连斯基的言论对和平谈判非常有害
  • 佩斯科夫:俄美总统会晤正在筹备中,未设定停火最后期限
  • 聚焦“共赢蓝色未来”,首届 “海洋命运共同体”上海论坛举行
  • 蔚来李斌:当下国际贸易环境有不确定性,但坚信中国汽车产业最终将占全球四成份额
  • 拍北京地铁上的读书人第七年:数字风吹散读书人了吗?
  • “沉默”的智驾:余承东不喊“遥遥领先”,何小鹏连夜改口 | 电厂