路径
- 绝对路径:是一个完整的路径,比如 c:\user\a.txt
- 相对路径: 是一个简化的路径
**注意:1.路径是不区分大小写的
2.路径中的文件名称分隔符windows使用反斜杠(\),反斜杠又是转义字符,所以两个反斜杠代表一个普通的反斜杠,程序中可以用File.separator
来代替 **
File类
1. 构造方法:
1.1.File(String pathname)
通过将给定的路径名的字符串转换成一个抽象路径名创建一个新的 File实例。
注意:
pathname,字符串的路径名称;
路径可以是以文件结尾,也可以是以文件夹结尾;
路径可以是绝对路径,也可以是相对路径;
路径可以是存在的,也可以是不存在的;
创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况
public static void main(String[] args) {
//String s = File.separator;
File file = new File("D:\\java\\workspace_pra\\Exception_1031");
System.out.println(file); //打印出了路径名,说明重写了Object的toString方法
File file2 = new File("D:\\java\\workspace_pra\\Exception_1031\\a.txt");
System.out.println(file2);
File file3 = new File("a.txt");
System.out.println(file3);
}
1.2 File(String parent, String child)
创建从父路径名的字符串和一个孩子的一个新的 File实例文件。
注意:
把路径分成了两部分:父路径和子路径;
这样好处就是,父路径和子路径可以单独书写,使用灵活多变
public static void main(String[] args) {
test02("c:","a.txt");
}
public static void test02(String parentPath,String childPath){
File file = new File(parentPath,childPath);
System.out.println(file);
}
2.常用的方法
2.1获取功能的方法
注意:length()方法中,当文件路径不存在时,返回为0;当路径是文件夹时,返回值是不确定的
2.2判断功能的方法
-
public boolean exists() :检查文件或目录是否存在这种抽象路径名记。
-
public boolean isDirectory() 此File是否是一个目录。
-
public boolean isFile() 此File是否是一个文件。
2.3 创建和删除功能
注意:
a. createNewFile()方法只能创建文件,不能创建目录,而且路径找不到会抛出异常,即“系统找不到指定的路径”。
b. delete()方法可以删除目录或者文件,但删除目录时,该目录不能有内容;当文件不存在或者目录下有内容时,删除失败,返回false;
删除是指彻底删除,没有放在回收站,删除需谨慎。
2.4 目录的遍历
- public String[] list()
返回一个String数组,表示该File目录中所有子文件或者目录的路径名。 - public File[] listFiles()
返回一个File数组,表示该File目录中所有的子文件或者目录 。
2.5文件过滤器实现(文件搜索)
- public File[] listFiles(FilenameFilter filter)
- public File[] listFiles(FileFilter filter)
实现一:listFiles()递归
package com.chw.file;
import java.io.File;
public class FileFilter {
public static void main(String[] args) {
File file = new File("D:\\java\\workspace_pra");
//getAllFile(file);
getAllFileByName(file, "add");
}
public static void getAllFile(File file){
File[] files = file.listFiles();
for(int i=0;i<files.length;i++){
if(files[i].isDirectory()){
getAllFile(files[i]);
}else{
System.out.println(files[i]);
}
}
}
public static void getAllFileByName(File file,String name){
File[] files = file.listFiles();
for(int i=0;i<files.length;i++){
if(files[i].isDirectory()){
getAllFileByName(files[i],name);
}else if(files[i].getName().toLowerCase().indexOf(name.toLowerCase())>-1){
System.out.println(files[i]);
}
}
}
}
实现二:使用listFiles的重载方法listFiles(FileFilter filter)
package com.chw.file;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
public class FileFilter2 {
public static void main(String[] args) {
findAllFileByName(new File("D:\\java\\workspace_pra"),".java");
}
private static void findAllFileByName(File file, final String name) {
File[] fs = file.listFiles(new FileFilter(){
@Override
public boolean accept(File f) {
return f.isDirectory()||f.getName().toLowerCase().contains(name.toLowerCase());
}
});
for(int i=0;i<fs.length;i++){
if(fs[i].isDirectory()){
findAllFileByName(fs[i], name);
}else {
System.out.println(fs[i]);
}
}
}
}