Java File的三种用途
前言
File类是Java IO系统中的关键类,这个名字有一定的误导性,它可能会被认为是一个文件。
实际上它既能代表一个特定文件的名称,也能代表一个目录,用文件路径来称呼会比较容易理解。
用途1:创建目录和文件
String dir = "F:/technology/filedir";
//创建目录
File testDir = new File(dir+"/testDir");
if(!testDir.exists()){
boolean b1 = testDir.mkdirs();
System.out.println(b1);
}
//创建文件
File testFile = new File(testDir.getAbsolutePath()+"/testfile.txt");
try {
//如果文件已存在,则返回false
boolean b2 = testFile.createNewFile();
System.out.println(b2);
} catch (IOException e) {
e.printStackTrace();
}
用途2:筛选目录中的文件
如果一个File是目录,那么使用list()
方法可以列表该目录下的所有文件和子目录的名称。并且该方法还可以传一个FilenameFilter
参数,用以筛选得到的结果。
首先要写一个类实现FilenameFilter
接口,重写accept(File dir, String name)
方法,并传入一个正则表达式构建一个Pattern对象,如下所示,也可采用匿名内部类的方式实现。
class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String regex) {
pattern = Pattern.compile(regex);
}
@Override
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
}
accept()
方法必须接受一个代表某个特定文件所有目录的File对象,以及文件名。list()
方法会为此目录对象下的每个文件名调用accept()来筛选文件(也适用于子目录),判断结果由accept()
返回的布尔值表示。
示例如下,筛选出所有带.class后缀的文件。
//筛选文件列表
File path = new File(dir);
//筛选前
String[] list = path.list();
System.out.println("筛选前...");
for(String dirItem:list){
System.out.println(dirItem);
}
//筛选后
String[] list2 = path.list(new DirFilter("\\w+\\.class"));
//将数组按照字母表进行排序
Arrays.sort(list2,String.CASE_INSENSITIVE_ORDER);
System.out.println("筛选后...");
for(String dirItem:list2){
System.out.println(dirItem);
}
筛选前…
abcdefclass
Chopstick.java
DeadlockingDiningPhilosophers.java
InnerThread.class
Meal.class
Philosopher.java
Restaurant.class
SelfManaged.class
SimpleDaemons.class
testDir
筛选后…
InnerThread.class
Meal.class
Restaurant.class
SelfManaged.class
SimpleDaemons.class
用途3:文件重命名或移动、属性查看
调用File的renameTo()
方法,可将一个文件重命名(或移动)到另一个File对象中,从而完成重命名或路径的更换。
示例如下:
File newTestFile = new File(testDir.getAbsolutePath()+"/hello_java.txt");
boolean c = testFile.renameTo(newTestFile);
System.out.println(c);
查看文件的各种属性
//查看绝对路径
System.out.println(newTestFile.getAbsolutePath());
//查看文件或目录名
System.out.println(newTestFile.getName());
//查看上级目录
System.out.println(newTestFile.getParent());
//查看文件内容的字节数
System.out.println(newTestFile.length());
//是否可读或可写
System.out.println(newTestFile.canRead()+","+newTestFile.canWrite());
//最后修改时间,毫秒值
System.out.println(newTestFile.lastModified());
//输出如下,txt内容为hello world!java~学习
F:\technology\filedir\testDir\hello_java.txt
hello_java.txt
F:\technology\filedir\testDir
21
true,true
1552312554155
总结:File类只是一个路径名称,只能创建或修改目录和文件,无法向文件内写入内容。