首先强调我自身小白对File的误解:File这个名字有一定的误导性,实际上FilePath对这个类来说是个更合适的名字,Java中的File类是文件和目录路径名的抽象形式。我们可能会认为它指代的是文件,但事实上,FIle既能代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。总结来说,File类主要用来获取或处理与磁盘文件相关的信息,如文件名、文件路径和修改日期等,其不具有从文件读取信息和向文件写入信息的功能,它仅描述文件本身的属性。
File类方法
构造方法:
File(File parFile,String chString);
//根据File类型的parFile抽象路径名,和String类型的chString路径名创建一个新的File实例。
File(String pathname);
//将给定的String类型的路径名字符串转换成File类型的抽象路径名来创建一个新的File类型。
File(String parent,String child);
//类似第一种方法,根据String类型的路径名字符串parent和相同类型的child路径名字符串创建一个新的File
File类包含的方法
File file=new File("D:/hello.txt");
//通过传一个String类型的pathname创建一个新的File
System.out.println(file.canRead());
//判断此文件是否为可读
System.out.println(file.canWrite());
//判断此文件是否为可写
System.out.println(file.exists());
//判断此文件是否存在
System.out.println(file.getAbsolutePath());
//获取此文件的绝对路径
System.out.println(file.getName());
//获取文件名
System.out.println(file.getParent());
//获取当前文件路径名的父路径名,如果没有父路径返回null
System.out.println(file.isAbsolute());
//判断当前file对象表示的是否为一个绝对路径
System.out.println(file.isDirectory());
//判断当前file对象表示的是否为一个路径
System.out.println(file.isFile());
//判断当前File对象表示的是否是一个普通文件
System.out.println(file.lastModified());
//获取此文件的最后修改时间
System.out.println(file.length());
//获取此对象表示的文件长度
System.out.println(file.list());
//获得当前对象指定的路径文件列表
// System.out.println(file.list(filter));
//获得当前对象指定的符合指定过滤器的文件列表
System.out.println(file.mkdir());
//创建一个由当前File对象路径名指定的文件夹
System.out.println(file.mkdirs());
//创建一个由当前File对象路径名指定的文件夹
// System.out.println(file.renameTo(null));
//将当前File对象指定的文件更名为参数File指定的路径名
// System.out.println(file.delete());
//删除此文件
// output:
// false
// false
// false
// D:\hello.txt
// hello.txt
// D:\
// true
// false
// false
// 0
// 0
// null
// true
// false
值得注意的是在windows文件夹中,目录形式为:D:\EclipseWork\Test 此类样式,在File类中使用路径时,应使用 :D:/EclipseWork/Test 或者 D:\EclipseWork\Test
常用操作:
- 遍历目录(通过使用list()方法实现)
File file=new File("D:/123");
String[] fileLiString=file.list();
for(int i=0;i<fileLiString.length;i++) {
System.out.println(fileLiString[i]);
System.out.println(new File("C:/123/"+fileLiString[i]).isFile());
System.out.println(new File("C:/123/"+fileLiString[i]).length());
}
// output:
// aaa.txt
// false
// 0
// bbb.txt
// false
// 0
// hello.txt
// false
// 0
// world.txt
// false
// 0
2.过滤遍历目录(通过使用list(FilenameFilter)实现)
在上述操作的基础上加入和Filter
class aFilter implements FilenameFilter{
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return name.endsWith(".html");
}
}
public static void main(String[] args) {
File file=new File("D:/123");
String[] fileLiString=file.list(new aFilter());
//获取此路径名字符串下后缀为.html的文件
for(int i=0;i<fileLiString.length;i++) {
System.out.println(fileLiString[i]);
System.out.println(new File("C:/123/"+fileLiString[i]).isFile());
System.out.println(new File("C:/123/"+fileLiString[i]).length());
}
}
3.创建/删除文件
public static void main(String[] args) throws IOException{
File file=new File("D:/123");
if (file.exists()) {
file.delete();
}
file.createNewFile();
}
此方法中有潜在的异常情况:如果路径中的"123"不存在,或者在多线程中文件中途被删除。所以我们需要抛出这个异常。