1. 概述
java.io.File
类:文件和文件目录的抽象表示形式,与平台无关File
能新建、删除、重命名文件和目录,但File
不能访问文件本身。如果需要访问文件内容本身,则需要使用输入输出流- 想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个
File
对象,但是Java程序中的一个File
对象,可能没有一个真实存在的文件或目录 File
对象可以作为参数传递给流的构造器
2. File类的使用
2.1 常用构造器
public File(String pathname)
:以pathname
为路径创建File
对象,可以是绝对路径或者相对路径,如果pathname
是相对路径,则默认当前路径在系统属性user.id
中存储。- 绝对路径:是一个固定的路径,从盘符开始
- 相对路径:是相对于某个位置开始
public File(String pathname, String child)
:以parent
为父路径,child
为子路径创建File
对象public File(File parent, String child)
:根据一个父File
对象和自文件路径创建File
对象
@Test
public void test1() {
// 相对于当前module
File file1 = new File("hello.txt");
// 绝对路径
File file2 = new File("D:\\workshop\\code_learn\\JavaSenior\\day08");
}
2.2 路径分隔符
- 路径中的每级目录之间用一个路径分隔符隔开
路径分隔符和系统有关
- Windows和DOS系统默认使用
\
来表示 - UNIX和URL使用
/
来表示
- Windows和DOS系统默认使用
- Java程序支持跨平台执行,因此路径分隔符要慎用
- 为了解决这个隐患,
File
类提供了一个常量:public static final String separator
。根据操作系统,动态提供分隔符。
// 使用路径分隔符
File file3 = new File("D:" + File.separator + "workshop");
2.3 常用方法
2.3.1 File类的获取功能
public String getAbsolutePath()
:获取绝对路径public String getPath()
:获取路径public String getName()
:获取名称public String getParent()
:获取上层文件目录,若无,则返回null
public long length()
:获取文件长度,即字节数。目录不能获取长度public long lastModified()
:获取最后一次修改时间,毫秒值public String[] list()
:获取指定目录下的所有文件或者文件目录的名称数组,适用于目录public File[] listFiles()
:获取指定目录下的所有文件或者文件目录的File
数组,适用于目录
@Test
public void test2() {
// 相对路径文件
File file1 = new File("hello.txt");
// 绝对路径文件
File file2 = new File("d:\\io\\hello.txt");
System.out.println("file1.getAbsolutePath(): " + file1.getAbsolutePath());
System.out.println("file1.getPath(): " + file1.getPath());
System.out.println("file1.getName(): " + file1.getName());
System.out.println("file1.getParent(): " + file1.getParent());
System.out.println("file1.length(): " + file1.length());
System.out.println("file1.lastModified(): " + file1.lastModified());
System.out.println("file2.getAbsolutePath(): " + file2.getAbsolutePath());
System.out.println("file2.getPath(): " + file2.getPath());
System.out.println("file2.getName(): " + file2.getName());
System.out.println("file2.getParent(): " + file2.getParent());
System.out.println("file2.length(): " + file2.length());
System.out.println("file2.lastModified(): " + file2.lastModified());
}
运行结果:
file1.getAbsolutePath(): D:\workshop\code_learn\JavaSenior\day08\hello.txt file1.getPath(): hello.txt file1.getName(): hello.txt file1.getParent(): null file1.length(): 11 file1.lastModified(): 1617889602553 file2.getAbsolutePath(): d:\io\hello.txt file2.getPath(): d:\io\hello.txt file2.getName(): hello.txt file2.getParent(): d:\io file2.length(): 0 file2.lastModified(): 1617889473421
@Test
public void test3() {
File file = new File("D:\\workshop\\code_learn\\JavaSenior\\day08");
String[] list = file.list();
File[] files = file.listFiles();
for (File file1 : files) {
System.out.println(file1.toString());
}
for (String s : list) {
System.out.println(s);
}
}
运行结果:
D:\workshop\code_learn\JavaSenior\day08\day08.iml D:\workshop\code_learn\JavaSenior\day08\hello.txt D:\workshop\code_learn\JavaSenior\day08\pom.xml D:\workshop\code_learn\JavaSenior\day08\src D:\workshop\code_learn\JavaSenior\day08\target day08.iml hello.txt pom.xml src target
2.3.2 File类的重命名功能
public boolean renameTo(File dest)
:把文件重命名为指定的文件路径
@Test
public void test4() {
// 相对路径文件
File file1 = new File("hello.txt");
File file2 = new File("helloworld.txt");
// 要想保证返回值为true,要保证file1在硬盘上,且file2不能在硬盘中
boolean renameTo = file1.renameTo(file2);
System.out.println(renameTo);
}
运行结果:
true
要想保证返回值为true,要保证file1在硬盘上,且file2不能在硬盘中
2.3.3 File类的判断功能
public boolean isDirectory()
:判断是否是文件目录public boolean isFile()
:判断是否是文件public boolean exists()
:判断是否存在public boolean canRead()
:判断文件是否可读public boolean canWrite()
:判断是否可写public boolean isHidden()
:判断是否隐藏
@Test
public void test5() {
File file1 = new File("helloworld.txt");
System.out.println("file1.isDirectory(): " + file1.isDirectory());
System.out.println("file1.isFile(): " + file1.isFile());
System.out.println("file1.exists(): " + file1.exists());
System.out.println("file1.canRead(): " + file1.canRead());
System.out.println("file1.canWrite(): " + file1.canWrite());
System.out.println("file1.isHidden(): " + file1.isHidden());
}
运行结果:
file1.isDirectory(): false file1.isFile(): true file1.exists(): true file1.canRead(): true file1.canWrite(): true file1.isHidden(): false
2.3.4 File类的创建功能
public boolean createNewFile()
:创建文件。若文件存在,则不创建,返回falsepublic boolean mkdir()
:创建目录,如果此目录存在,则不创建,如果此文件目录的上层目录不存在,也不创建public boolean mkdirs()
:创建目录,如果上层文件目录不存在,一并创建
如果创建文件或者文件目录没有写盘符路径,那么默认在项目路径下
文件的创建:
@Test
public void test6() throws IOException {
File file1 = new File("hi.txt");
if (!file1.exists()) {
boolean newFile = file1.createNewFile();
if (newFile) {
System.out.println("创建成功");
}
}
}
运行结果:
创建成功
目录的创建:
@Test
public void test7() {
File file1 = new File("D:\\io\\io1");
boolean mkdir = file1.mkdir();
if(mkdir){
System.out.println("io1 创建成功");
}
File file2 = new File("D:\\io1\\io1");
boolean mkdir1 = file2.mkdir();
if (mkdir1){
System.out.println("io1/io1 创建成功");
}
File file3 = new File("D:\\io1\\io2");
boolean mkdir2 = file3.mkdirs();
if (mkdir2){
System.out.println("io1/io2 创建成功");
}
}
运行结果:
io1 创建成功 io1/io2 创建成功
运行前
D:\io
目录已经存在,D:\io1
目录不存在
2.3.5 File类的删除功能
public boolean delete()
:删除文件或者文件夹
@Test
public void test8() {
File file = new File("hi.txt");
boolean delete = file.delete();
if (delete) {
System.out.println("删除成功");
}
}
运行结果:
删除成功