目录
概述
提供操控操作系统文件的一个类,是文件和目录路径名的抽象表示,
两种路径
- 绝对路径: 从盘符开始逐渐靠近你想得到的那个位置,最真实
- 相对路径: 从当前位置出发,去靠近你想得到的那个位置。
特殊的:./ 代表当前位置 . ./ 代表返回上一级
构造方法
构造方法 | 描述 |
---|---|
File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例 |
File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的 File实例 |
File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的 File实例 |
样例
package main;
import java.io.File;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 方法一:File(String pathname)
File f1 = new File("C:\\aaa");
System.out.println(f1);
// 方法二:File(String parent, String child)
File f2 = new File("C:\\aaa", "aaa.txt");
System.out.println(f2);
// 方法三:File(File parent, String child)
File f3 = new File(new File("C:\\aaa"), "bbb\\aaa.txt");
System.out.println(f3);
}
}
运行结果:
C:\aaa
C:\aaa\aaa.txt
C:\aaa\bbb\aaa.txt
常用静态方法
返回值 | 静态方法 | 描述 | 拓展 |
---|---|---|---|
String | pathSeparator | 当多个路径组合在一起使用的分隔符 | linux:冒号( : ) windows:分号( ; ) |
String | separator | 某一个路径文件名称之间路径分隔符 | linux:反斜杠( / ) windows:正斜杠( \ ) |
样例
package main;
import java.io.File;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 产生原因: 提高可移植性。跨平台的运行不报错
// pathSeparator
// 我们在配置jdk的时候,在win7 以下的版本都是 分号或者冒号 隔开
System.out.println(File.pathSeparator);
// separator
// 提高可移植性的地点,获取路径的时候,可利用静态方法
File f = new File("C:" + File.separator + "aaa" + File.separator + "bbb" + File.separator + "aaa.txt");
System.out.println(f);
}
}
常用方法
获取功能方法
返回值 | 方法 | 描述 |
---|---|---|
String | getPath() | 返回构造函数参数路径 |
String | toString() | 返回构造函数参数路径 |
String | getAbsolutePath() | 返回绝对路径 |
String | getName() | 返回由此抽象路径名表示的文件或目录的名称 |
String | length() | 返回由此抽象路径名表示的文件的字节大小 |
获取功能方法样例
package main;
import java.io.File;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
File f1 = new File("C:\\aaa\\aaa.txt");
// 从输出样例,可以得出。这三者是一样的。
// 因此为了简便,以后可就直接打印对象名,因为重写了toString方法
System.out.println(f1.getPath());
System.out.println(f1.toString());
System.out.println(f1);
System.out.println(f1.getAbsolutePath()); // 返回是绝对路径
System.out.println(f1.getName()); // 返回是最后一级 目录或者文件
System.out.println(f1.length()); // 返回是文件的大小。重点:只有文件有大小,文件夹无大小
System.out.println("====================");
File f2 = new File("aaa.txt");
System.out.println(f2.getPath());
System.out.println(f2.toString());
System.out.println(f2);
System.out.println(f2.getAbsolutePath()); // 返回是绝对路径
System.out.println(f2.getName()); // 返回是最后一级 目录或者文件
System.out.println(f2.length()); // 返回是文件的大小。重点:只有文件有大小,文件夹无大小
}
}
运行结果:
C:\aaa\aaa.txt
C:\aaa\aaa.txt
C:\aaa\aaa.txt
C:\aaa\aaa.txt
aaa.txt
18
====================
aaa.txt
aaa.txt
aaa.txt
D:\java\MyEclipse\workspace(20200726)\Test\aaa.txt
aaa.txt
0
判断功能方法
返回值 | 方法 | 描述 |
---|---|---|
boolean | exists() | 测试该路径是否存在 |
boolean | isFile() | 测试该路径是否是文件 |
boolean | isDirectory() | 测试该路径是否是目录( 文件夹 ) |
判断功能方法样例
package main;
import java.io.File;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
File f1 = new File("C:\\aaa\\aaa.txt"); // 存在路径
File f2 = new File("C:\\aaa\\aa.txt"); // 不存在路径
File f3 = new File("C:\\aaa"); // 存在路径
File f4 = new File("C:\\aa"); // 不存在路径
System.out.println(f1.exists());
System.out.println(f2.exists());
System.out.println("============");
// 从这下面两个案例可以明白,要想判断是否是目录还是文件。
// 前提条件必须是文件存在形式
// 并且如果路径是书写对的情况 。两个方法是:互斥关系
System.out.println(f1.isFile());
System.out.println(f2.isFile());
System.out.println("============");
System.out.println(f3.isDirectory());
System.out.println(f4.isDirectory());
}
}
运行结果:
true
false
============
true
false
============
true
false
创建删除文件、文件夹方法
返回值 | 方法 | 描述 |
---|---|---|
boolean | createNewFile() | 如果该路径文件不存在,则创建一个该路径的空文件 |
boolean | delete() | 删除由此抽象路径名表示的文件或目录 |
boolean | mkdir() | 创建单级目录 |
boolean | mkdirs() | 创建多级目录 |
创建删除文件、文件夹方法样例
package main;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
File f1 = new File("C:\\bbb\\bbb.txt");
File f2 = new File("C:\\ccc");
System.out.println(f1.exists());
System.out.println(f2.exists());
try {
System.out.println(f1.createNewFile());
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("要想创建创建文件,其上一级必须能索引到");
}
try {
System.out.println(f2.createNewFile());
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("不能创建目录哟");
}
System.out.println("=====================");
File f3 = new File("C:\\aaa");
File f4 = new File("C:\\aaa\\aaa.txt");
// 如果要提前想删除目录,必须保证该目录下,已经没有文件了
System.out.println(f3.delete());
System.out.println(f4.delete());
System.out.println(f3.delete());
System.out.println("=====================");
File f5 = new File("C:\\bbb\\bbb\\bbb.txt");
File f6 = new File("C:\\bbb");
System.out.println(f6.mkdir());
System.out.println(f5.mkdirs());
}
}
运行结果:
false
false
要想创建创建文件,其上一级必须能索引到
不能创建目录哟
=====================
false
true
true
=====================
true
true
遍历文件、文件夹方法
返回值 | 方法 | 描述 |
---|---|---|
String[ ] | list() | 命名由此抽象路径名表示的目录中的文件和目录 |
String[ ] | listFiles() | 表示由该抽象路径名表示的目录中的文件 |
File[ ] | list(FilenameFilter filter) | 命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录 |
File[ ] | listFiles(FilenameFilter filter) | 表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录 |
遍历文件、文件夹方法样例
package main;
import java.io.File;
import java.io.FilenameFilter;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 方法一
File f1 = new File("C:\\bbb");
String[] s1 = f1.list();
for(String i : s1) {
System.out.println(i);
}
System.out.println("================");
// 方法二
File f2 = new File("C:\\bbb");
File[] s2 = f2.listFiles();
for(File i : s2) {
System.out.println(i.getAbsolutePath());
}
System.out.println("==============");
// 后面 两种方法
// 参数列表是一个过滤器。
// 可以根据自己的需求,过滤掉你不需要,你不想要的文件或目录
File f11 = new File("C:\\bbb");
// 该过滤器只有一个方法。 accept。重写规则即可
// 比如这里,我只想要 .txt 结尾的文件
String[] s11 = f11.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
System.out.println("dir是一个目录:" + dir + "\t" + "name是一个文件:" + name);
if(name.endsWith(".txt"))
return true;
return false;
}
});
for(String i : s11) {
System.out.println(i);
}
System.out.println("================");
File f22 = new File("C:\\bbb");
File[] s22 = f22.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
System.out.println("dir是一个目录:" + dir + "\t" + "name是一个文件:" + name);
if(name.endsWith(".txt"))
return true;
return false;
}
});
for(File i : s22) {
System.out.println(i.getAbsolutePath());
}
System.out.println("==============");
}
}
运行结果:
aaa
AAA.txt
bbb
bbb.txt
main.java
================
C:\bbb\aaa
C:\bbb\AAA.txt
C:\bbb\bbb
C:\bbb\bbb.txt
C:\bbb\main.java
==============
dir是一个目录:C:\bbb name是一个文件:aaa
dir是一个目录:C:\bbb name是一个文件:AAA.txt
dir是一个目录:C:\bbb name是一个文件:bbb
dir是一个目录:C:\bbb name是一个文件:bbb.txt
dir是一个目录:C:\bbb name是一个文件:main.java
AAA.txt
bbb.txt
================
dir是一个目录:C:\bbb name是一个文件:aaa
dir是一个目录:C:\bbb name是一个文件:AAA.txt
dir是一个目录:C:\bbb name是一个文件:bbb
dir是一个目录:C:\bbb name是一个文件:bbb.txt
dir是一个目录:C:\bbb name是一个文件:main.java
C:\bbb\AAA.txt
C:\bbb\bbb.txt
==============
递归遍历指定路径下所有文件实例
PS:当然你可以遍历,也可以删除。但一定不要做蠢事哟 !
package file;
import java.io.File;
public class RecursionFile {
public static void main(String[] args) {
// TODO Auto-generated method stub
f(new File("D:\\unity3D\\激活+汉化") , 0);
}
public static void f(File f,int t) {
for(int j = 0; j < t ;j++) {
System.out.print("\t");
}
System.out.println(f.getAbsolutePath());
File[] file = f.listFiles();
for(File i : file) {
if(i.isDirectory()) {
f(i,t + 1);
}else if ( i.isFile()) {
for(int j = 0; j <= t ;j++) {
System.out.print("\t");
}
System.out.println(i.getAbsolutePath());
}
}
}
}