Java中File类的方法详解
File类也是Java中一个比较重要的类,通过他我们可以实现对文件的一系列操作,其内置了很多方法,下面我将按方法的功能分块,逐一讲解:
快速导航
- 构造方法
- 常用方法
- 创建目录
- 判断 `is...`
- toString()
- 获取字节数length()
- 删除文件
- 更名操作
- 比较两个路径
- 获取和修改最后修改时间
- 获取子文件(也可以是目录)
- `get`方法大汇总(基本都是获取)
- 测试与设置权限
点击跳转
更名操作
@Test
public void renameTest() throws IOException {
File file = new File("ahello/a/abc.txt");
// System.out.println(file.mkdirs());
System.out.println(file.createNewFile());
// file.mkdirs();
System.out.println(file);
//如果重命名的文件已存在,则不会重命名
System.out.println(file.renameTo(new File("a/b/c/abcd.txt")));
System.out.println(file.getName());
//注意事项:
//第一种场景:同一路径下文件重命名【文件重命名】
//第二种场景:将文件从一个路径移动另一个路径下,并且移动的文件进行重命名【文件移动重命名】
//第三种场景:修改文件夹的名称,文件夹里面没有文件的时候修改成功!
}
比较两个路径
@Test
public void compareToTest() {
//如果参数等于此抽象路径名,则为零;如果此抽象路径名按字典顺序小于参数,则为小于零;如果此抽象路径名在字典上大于参数,则值大于零
File f1 = new File("d:\\hello");
File f2 = new File("d:\\hello\\a");
File f3 = new File("d:\\hell");
File f4 = new File("d:\\hello");
//System.out.println(f1.compareTo(f2)); //-2
//System.out.println(f1.compareTo(f3)); //1
//System.out.println(f1.compareTo(f4)); //0
}
获取和修改最后修改时间
@Test
public void lastModifiedAndSetTest() {
//记录文件的最后修改时间,是一个long时间戳
File file = new File("E:\\HelloJava\\Java_Study_Beiyou\\src\\day_12_13");
long time = file.lastModified();
System.out.printf("%tF %, time); //2021-12-14 08:44:38
System.out.println();
//boolean setLastModified(long time) 设置此抽象路径名指定的文件或目录的上次修改时间。
long now = System.currentTimeMillis();
file.setLastModified(now);
System.out.printf("%tF %, now); //2021-12-14 18:15:32
}
获取子文件(也可以是目录)
@Test
public void listTest() {
/*
String[] list() 返回一个字符串数组,用于命名此抽象路径名表示的目录中的文件和目录。
String[] list(FilenameFilter filter) 返回一个字符串数组,用于命名由此抽象路径名表示的目录中的文件和目录,以满足指定的过滤器。
File[] listFiles() 返回一个抽象路径名数组,表示此抽象路径名表示的目录中的文件。
File[] listFiles(FileFilter filter) 返回一个抽象路径名数组,表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FilenameFilter filter) 返回一个抽象路径名数组,表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
static File[] listRoots() 列出可用的文件系统根目录。
*/
File file = new File("E:\\谷歌");
// list() 返回的是字符串数组
String[] listStr = file.list();
System.out.println(Arrays.toString(listStr));
// listFiles() 返回的是 File[] 可以对文件直接操作
File[] listF = file.listFiles();
for (File file1 : listF) {
System.out.print(file1.getName() + ", ");
}
// listRoots() 列出可用的文件系统根目录。
System.out.println();
File[] listRoots = File.listRoots();
for (File root : listRoots) {
System.out.println(root.getPath());
}
//对文件筛选操作
//两种方式
// FilenameFilter filter --- boolean accept(File dir, String name); dir为文件根目录(不包含此文件) name为文件名
// FileFilter filter -------- boolean accept(File pathname); pathname为文件路径(包含此文件)
//list(FilenameFilter filter) FilenameFilter支持lambda,两个参数()
String[] listStrs = file.list((path, name) -> name.endsWith("zip")); //列出所有以zip结尾的文件
System.out.println(Arrays.toString(listStrs));
//listFiles(FilenameFilter filter)
FilenameFilter filter;
File[] listFiles = file.listFiles((path, name) -> name.matches(".*[\\d+].*")); //获取所有文件名中带有数字的
for (File file1 : listFiles) {
System.out.print(file1.getName() + ", ");
}
//listFiles(FileFilter filter)
File[] lfs = file.listFiles(e -> e.getName().matches(".*[\\u4e00-\\u9fa5]+.*")); //获得包含中文的文件
for (File f : lfs) {
System.out.print(f.getName() + ", ");
}
}
get方法大汇总(基本都是获取)
@Test
public void getTest() throws IOException {
/*
返回值类型 方法名 描述
File getAbsoluteFile() 返回此抽象路径名的绝对形式。
String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
File getCanonicalFile() 返回此抽象路径名的规范形式。
String getCanonicalPath() 返回此抽象路径名的规范路径名字符串。
String getName() 返回此抽象路径名表示的文件或目录的名称。
String getPath() 将此抽象路径名转换为路径名字符串。
String getParent() 返回此抽象路径名父项的路径名字符串,如果此路径名未指定父目录,则返回 null 。
File getParentFile() 返回此抽象路径名父项的抽象路径名,如果此路径名未指定父目录,则返回 null 。
long getFreeSpace() 通过此抽象路径名返回分区 named中未分配的字节数。
long getUsableSpace() 通过此抽象路径名返回分区 named上此虚拟机可用的字节数。
long getTotalSpace() 通过此抽象路径名返回分区 named的大小。
*/
File file = new File("E:\\HelloJava\\Java_Study_Beiyou\\src\\day_12_13");
System.out.println(file.getAbsoluteFile()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getAbsolutePath()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getCanonicalFile()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getCanonicalPath()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getName()); //day_12_13
System.out.println(file.getPath()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getParent()); //E:\HelloJava\Java_Study_Beiyou\src
System.out.println(file.getParentFile()); //E:\HelloJava\Java_Study_Beiyou\src
System.out.println(file.getFreeSpace()); //339921727488
System.out.println(file.getTotalSpace()); //786633322496
System.out.println(file.getUsableSpace()); //339921727488
}
测试与设置权限
@Test
public void canTest() {
/*
boolean canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。
boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。
boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。
*/
File file = new File("aaa\\bbb\\ccc\\test.txt");
System.out.println(file.canExecute()); //true
System.out.println(file.canRead()); //true
System.out.println(file.canWrite()); //true
}
@Test
public void setTest() {
/*
boolean setExecutable(boolean executable) 一种方便的方法,用于设置此抽象路径名的所有者执行权限。
boolean setExecutable(boolean executable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的执行权限。
boolean setReadable(boolean readable) 一种方便的方法,用于设置此抽象路径名的所有者读取权限。
boolean setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的读取权限。
boolean setReadOnly() 标记此抽象路径名指定的文件或目录,以便仅允许读取操作。
boolean setWritable(boolean writable) 一种方便的方法,用于设置此抽象路径名的所有者写入权限。
boolean setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的写入权限。
*/
File file = new File("aaa\\bbb\\ccc\\test.txt");
//System.out.println(file.setExecutable(false, false)); //false
//System.out.println(file.canExecute()); //true
//System.out.println(file.canRead()); //true
//System.out.println(file.canWrite()); //true
//System.out.println(file.setReadable(false,false));
//System.out.println(file.canExecute()); //true
//System.out.println(file.canRead()); //true
//System.out.println(file.canWrite()); //true
//System.out.println(file.setWritable(false,false));
//System.out.println(file.canExecute()); //true
//System.out.println(file.canRead()); //true
//System.out.println(file.canWrite()); //false
//System.out.println(file.setReadOnly());
//System.out.println(file.canExecute()); //true
//System.out.println(file.canRead()); //true
//System.out.println(file.canWrite()); //false
}
@Test
public void renameTest() throws IOException {
File file = new File("ahello/a/abc.txt");
// System.out.println(file.mkdirs());
System.out.println(file.createNewFile());
// file.mkdirs();
System.out.println(file);
//如果重命名的文件已存在,则不会重命名
System.out.println(file.renameTo(new File("a/b/c/abcd.txt")));
System.out.println(file.getName());
//注意事项:
//第一种场景:同一路径下文件重命名【文件重命名】
//第二种场景:将文件从一个路径移动另一个路径下,并且移动的文件进行重命名【文件移动重命名】
//第三种场景:修改文件夹的名称,文件夹里面没有文件的时候修改成功!
}
@Test
public void compareToTest() {
//如果参数等于此抽象路径名,则为零;如果此抽象路径名按字典顺序小于参数,则为小于零;如果此抽象路径名在字典上大于参数,则值大于零
File f1 = new File("d:\\hello");
File f2 = new File("d:\\hello\\a");
File f3 = new File("d:\\hell");
File f4 = new File("d:\\hello");
//System.out.println(f1.compareTo(f2)); //-2
//System.out.println(f1.compareTo(f3)); //1
//System.out.println(f1.compareTo(f4)); //0
}
@Test
public void lastModifiedAndSetTest() {
//记录文件的最后修改时间,是一个long时间戳
File file = new File("E:\\HelloJava\\Java_Study_Beiyou\\src\\day_12_13");
long time = file.lastModified();
System.out.printf("%tF %, time); //2021-12-14 08:44:38
System.out.println();
//boolean setLastModified(long time) 设置此抽象路径名指定的文件或目录的上次修改时间。
long now = System.currentTimeMillis();
file.setLastModified(now);
System.out.printf("%tF %, now); //2021-12-14 18:15:32
}
@Test
public void listTest() {
/*
String[] list() 返回一个字符串数组,用于命名此抽象路径名表示的目录中的文件和目录。
String[] list(FilenameFilter filter) 返回一个字符串数组,用于命名由此抽象路径名表示的目录中的文件和目录,以满足指定的过滤器。
File[] listFiles() 返回一个抽象路径名数组,表示此抽象路径名表示的目录中的文件。
File[] listFiles(FileFilter filter) 返回一个抽象路径名数组,表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FilenameFilter filter) 返回一个抽象路径名数组,表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
static File[] listRoots() 列出可用的文件系统根目录。
*/
File file = new File("E:\\谷歌");
// list() 返回的是字符串数组
String[] listStr = file.list();
System.out.println(Arrays.toString(listStr));
// listFiles() 返回的是 File[] 可以对文件直接操作
File[] listF = file.listFiles();
for (File file1 : listF) {
System.out.print(file1.getName() + ", ");
}
// listRoots() 列出可用的文件系统根目录。
System.out.println();
File[] listRoots = File.listRoots();
for (File root : listRoots) {
System.out.println(root.getPath());
}
//对文件筛选操作
//两种方式
// FilenameFilter filter --- boolean accept(File dir, String name); dir为文件根目录(不包含此文件) name为文件名
// FileFilter filter -------- boolean accept(File pathname); pathname为文件路径(包含此文件)
//list(FilenameFilter filter) FilenameFilter支持lambda,两个参数()
String[] listStrs = file.list((path, name) -> name.endsWith("zip")); //列出所有以zip结尾的文件
System.out.println(Arrays.toString(listStrs));
//listFiles(FilenameFilter filter)
FilenameFilter filter;
File[] listFiles = file.listFiles((path, name) -> name.matches(".*[\\d+].*")); //获取所有文件名中带有数字的
for (File file1 : listFiles) {
System.out.print(file1.getName() + ", ");
}
//listFiles(FileFilter filter)
File[] lfs = file.listFiles(e -> e.getName().matches(".*[\\u4e00-\\u9fa5]+.*")); //获得包含中文的文件
for (File f : lfs) {
System.out.print(f.getName() + ", ");
}
}
get方法大汇总(基本都是获取) @Test
public void getTest() throws IOException {
/*
返回值类型 方法名 描述
File getAbsoluteFile() 返回此抽象路径名的绝对形式。
String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
File getCanonicalFile() 返回此抽象路径名的规范形式。
String getCanonicalPath() 返回此抽象路径名的规范路径名字符串。
String getName() 返回此抽象路径名表示的文件或目录的名称。
String getPath() 将此抽象路径名转换为路径名字符串。
String getParent() 返回此抽象路径名父项的路径名字符串,如果此路径名未指定父目录,则返回 null 。
File getParentFile() 返回此抽象路径名父项的抽象路径名,如果此路径名未指定父目录,则返回 null 。
long getFreeSpace() 通过此抽象路径名返回分区 named中未分配的字节数。
long getUsableSpace() 通过此抽象路径名返回分区 named上此虚拟机可用的字节数。
long getTotalSpace() 通过此抽象路径名返回分区 named的大小。
*/
File file = new File("E:\\HelloJava\\Java_Study_Beiyou\\src\\day_12_13");
System.out.println(file.getAbsoluteFile()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getAbsolutePath()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getCanonicalFile()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getCanonicalPath()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getName()); //day_12_13
System.out.println(file.getPath()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getParent()); //E:\HelloJava\Java_Study_Beiyou\src
System.out.println(file.getParentFile()); //E:\HelloJava\Java_Study_Beiyou\src
System.out.println(file.getFreeSpace()); //339921727488
System.out.println(file.getTotalSpace()); //786633322496
System.out.println(file.getUsableSpace()); //339921727488
}
@Test
public void canTest() {
/*
boolean canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。
boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。
boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。
*/
File file = new File("aaa\\bbb\\ccc\\test.txt");
System.out.println(file.canExecute()); //true
System.out.println(file.canRead()); //true
System.out.println(file.canWrite()); //true
}
@Test
public void setTest() {
/*
boolean setExecutable(boolean executable) 一种方便的方法,用于设置此抽象路径名的所有者执行权限。
boolean setExecutable(boolean executable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的执行权限。
boolean setReadable(boolean readable) 一种方便的方法,用于设置此抽象路径名的所有者读取权限。
boolean setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的读取权限。
boolean setReadOnly() 标记此抽象路径名指定的文件或目录,以便仅允许读取操作。
boolean setWritable(boolean writable) 一种方便的方法,用于设置此抽象路径名的所有者写入权限。
boolean setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的写入权限。
*/
File file = new File("aaa\\bbb\\ccc\\test.txt");
//System.out.println(file.setExecutable(false, false)); //false
//System.out.println(file.canExecute()); //true
//System.out.println(file.canRead()); //true
//System.out.println(file.canWrite()); //true
//System.out.println(file.setReadable(false,false));
//System.out.println(file.canExecute()); //true
//System.out.println(file.canRead()); //true
//System.out.println(file.canWrite()); //true
//System.out.println(file.setWritable(false,false));
//System.out.println(file.canExecute()); //true
//System.out.println(file.canRead()); //true
//System.out.println(file.canWrite()); //false
//System.out.println(file.setReadOnly());
//System.out.println(file.canExecute()); //true
//System.out.println(file.canRead()); //true
//System.out.println(file.canWrite()); //false
}