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

文件操作和IO-2 使用Java操作文件

Java操作文件的API

1、针对文件系统的操作。包括但不限于:创建文件、删除文件、重命名文件、列出目录内容……

2、针对文件内容的操作。读文件/写文件

Java中针对文件的操作,使用File类来进行操作,这个类被存储在java.io这个包里面。

i:input,输入。 o:output,输出。

数据从硬盘写到CPU叫输入,数据从CPU写回硬盘叫输出。

File概述

属性

这两种属性是文件路径的表示,可以表示为字符串类型或者字符类型,依赖于路径分隔符,实际开发中多使用“\”进行分隔。

构造方法

大多数情况下,我们使用第二种构造方法。

构造一个File对象,需要指定路径。此处的路径可以说绝对路径也可以是相对路径(也可以是不存在的路径)

写作相对路径就会产生两种情况:

1、如果是直接在idea中运行程序,此时工作目录就是我们项目所在的目录。

2、如果是把代码打包成一个单独的jar包来执行,此时工作目录就是jar包所在的目录。

如果是其他两种方式的话,例如:对于C:\User\寻梦缘6\test.txt,它的父目录:C:\User\寻梦缘6

方法 

getParent/getName/getPath/getAbsolutePath/getCanonicalPath

示例代码:

刚才我们在C盘下的User目录的寻梦缘6目录中有一个test.txt文件,使用它的绝对路径当作参数传入File中。

import java.io.File;
import java.io.IOException;public class FileDemo1 {public static void main(String[] args) throws IOException {File file = new File("C:/User/寻梦缘6/test.txt");//获取当前文件的名字System.out.println(file.getName());//获取当前文件的父亲目录System.out.println(file.getParent());//获取当前文件对象的路径System.out.println(file.getPath());//获取当前文件的绝对路径(简化版)System.out.println(file.getCanonicalPath());//获取当前文件的绝对路径System.out.println(file.getAbsolutePath());}
}

打印结果如下: 

此时我们可以看到:在绝对路径下,getPath()、getAbsolutePath()和getCanonicalPath()结果都是差不多的。

当我们改为相对路径时又会出现什么情况呢?

代码如下: 

import java.io.File;
import java.io.IOException;public class FileDemo1 {public static void main(String[] args) throws IOException {File file = new File("./test.txt");//获取当前文件的名字System.out.println(file.getName());//获取当前文件的父亲目录System.out.println(file.getParent());//获取当前文件对象的路径System.out.println(file.getPath());//获取当前文件的绝对路径(简化版)System.out.println(file.getCanonicalPath());//获取当前文件的绝对路径System.out.println(file.getAbsolutePath());}
}

运行结果如下: 

 观察打印结果发现:

这里的getParent()方法只打印了一个 .来表示父目录。getPath()方法打印的是File构造方法中的参数,最后,我们发现getAbsolutePath方法和下面的getConicalPath方法就是打印的是我们当前Java进程所在的路径再加上当前的文件的名字。再仔细观察,我们可以发现getAsbolutePath方法比getCanoicalPath方法多了一个点,这个.就表示当前的路径,相当于原地踏步了一下,而getCanoicalPath方法的到的就是上面绝对路径简化的结果,就没有那个点了。

exists/isFile/isDirectory/createNewFile

代码如下:

import java.io.File;
import java.io.IOException;public class FileDemo2 {public static void main(String[] args) throws IOException {File file = new File("./test.txt");//判断当前file对象是否存在System.out.println(file.exists());//判断当前file对象是否是文件System.out.println(file.isFile());//判断当前file对象是否是目录System.out.println(file.isDirectory());//创建文件对象boolean ret = file.createNewFile();System.out.println("是否成功创建对象"+ret);}
}

注意 :在使用createNewFile时需要抛出IOException(这是文件IO经常会涉及到的异常)。

第一次运行结果如下: 

可以看到在file对象没有创建前,当前file对象不存在,不存在就不是文件也不是目录了。最后,再创建当前flie对象,我们可以再左侧项目那里看到:我们当前的文件对象已经被创建好了。

再次运行,结果如下: 

可以看到当前file对象存在,且它是文件,不是目录,无法成功创建file对象了(一个文件只能被创建一次)。

delete 和 deleteOnExit

delete用来直接删除文件:

import java.io.File;public class FileDemo3 {public static void main(String[] args) {File file = new File("./test.txt");boolean ret = file.delete();System.out.println(ret);}
}

运行结果: 可以看到,刚才还在项目里的test文件消失了:

deleteOnExit 等到进程结束再对文件进行删除:

先再创建好一个test文件:

代码如下: 

import java.io.File;public class FileDemo4 {public static void main(String[] args) throws InterruptedException {File file = new File("./test.txt");file.deleteOnExit();Thread.sleep(5000);}
}

为了让代码效果演示更明显(突出和delete的区别),我们这里让main线程sleep个5s再退出。 

可以看到,在5s后文件消失:


退出后再删除,这样的文件,也被称为“临时文件”。我们的Word文档就会有一个临时文件 ,点击此电脑,打开查看中的显示,将隐藏的项目打开。

此时随便打开一个Word文档,就可以看到:

那么这个临时文件的作用是什么呢?我们正在编辑的内容,都是在内存中的,如果我们的电脑(台式机)突然断电,内存数据就没有了。这个临时文档会将我们正在编写的内容存到这个临时文件中,借助这个临时文件就可以恢复断电之前的数据。

list/listFiles

list会返回File对象目录下的所有文件名,而listFiles则会返回File对象目录下的所有文件名的相对路径。

测试代码:

import java.io.File;
import java.util.Arrays;public class FileDemo5 {public static void main(String[] args) {File file = new File(".");//返回当前路径的所有文件名System.out.println(Arrays.toString(file.list()));//返回当前路径的所有文件的相对路径System.out.println(Arrays.toString(file.listFiles()));}
}

运行结果:

mkdir/mkdirs

mrdir创建File对象为代表的目录: 

import java.io.File;public class FileDemo6 {public static void main(String[] args) {File file = new File("./aaa");boolean ret = file.mkdir();System.out.println(ret);}
}

运行结果:

mkdirs可以用来创建中间目录:

比如,我们想要在刚才的aaa下创建bbb,再在bbb下创建ccc,就可以这么写: 

import java.io.File;public class FileDemo7 {public static void main(String[] args) {File file = new File("./aaa/bbb/ccc");boolean ret = file.mkdirs();System.out.println(ret);}
}

运行结果如下:

renameTo

renameTo可用于文件改名,也可以用于修改文件路径,相当于重构。

先准备好我们要操作的文件:

代码如下:

import java.io.File;public class FileDemo8 {public static void main(String[] args) {File file = new File("./test.txt");File file1 = new File("./test2.txt");System.out.println(file.renameTo(file1));}
}

 结果如下:

下面我们再使用removeTo方法将该test2文件放到刚才的aaa/bbb/ccc目录下。

代码如下 :

import java.io.File;public class FileDemo9 {public static void main(String[] args) {File file = new File("./test2.txt");File file1 = new File("./aaa/bbb/ccc/test2.txt");System.out.println(file.renameTo(file1));}
}

结果如下:

 

 

相关文章:

  • 如何使用VH6501进行CAN采样点测试
  • 【办公类-18-04】(Python)“验血单信息”批量生成打印(学校、班级、姓名、性别)
  • 【Linux基础操作】
  • 【MySQL成神之路】运算符总结
  • MySQL底层专题之索引数据结构和存储引擎
  • 笔记:显示实现接口如何实现,作用是什么
  • 算法打卡第二天
  • 【老马】流程引擎(Process Engine)概览
  • Linux系统中,Ctrl+C的运行过程是什么?
  • 接口测试速成指南:基础知识+工具使用全解析
  • 如何查看Python内置函数列表
  • 连接Redis数据库
  • JWT单双token实现机制记录
  • 2025系统架构师---案例题(押题)
  • Pydantic数据验证实战指南:让Python应用更健壮与智能
  • 使用引用的原因 和 运算符重载的必要性
  • 【Python训练营打卡】day31 @浙大疏锦行
  • 第六天的尝试
  • 游戏开发实战(二):Python复刻「崩坏星穹铁道」嗷呜嗷呜事务所---源码级解析该小游戏背后的算法与设计模式【纯原创】
  • TripGenie:畅游济南旅行规划助手:个人工作纪实(十八)
  • 闽赣两省受强对流天气影响停运多条铁路
  • 文学如何遭遇世界:日本“世界文学”的半个世纪
  • 英国研究:近七成年轻人认为上网有害心理健康
  • 在越剧之乡嵊州,浙江音乐学院越剧学院成立
  • 中纪报:强化监督推动过紧日子要求落到实处
  • 完善劳动关系协商协调机制,《共同保障劳动者合法权益工作指引》发布