**
File
**
这篇日志写了Java中File类的创建,常用方法以及FileFilter的使用。
想要通过代码创建文件以及对文件操作,首先要知道文件的路径是什么,以我的电脑为例,看一下我桌面一个html文件的路径:/Users/dudududu/Desktop/ttt.html。
这个路径除了包含了我们熟悉目录名称外,还包含了文件名称分隔符(/),而不同的OS有不同的文件名称分隔符,幸好我们可以用一个File类的静态方法查看此OS下的文件分隔符
//separator静态方法
String separator=File.separator;
System.out.println(separator);
结果
/
介绍完这个,我们来看一下File类的三种构造方法
第一种,传递一个参数
File f1=new File(/Users/dudududu/Desktop/ttt.html);
System.out.println(f1);
第二种,传递两个参数
File f2=new File("/Users/dudududu/","Desktop/ttt.html");
System.out.println(f2);
第三种,传递两个参数,第一个参数是File类的对象
File parent=new File("/Users/dudududu/");
File f3=new File(parent,"Desktop/ttt.html");
System.out.println(f3);
结果
/Users/dudududu/Desktop/ttt.html
/Users/dudududu/Desktop/ttt.html
/Users/dudududu/Desktop/ttt.html
我们以上面创建的f1为例,介绍一下File类的常用方法
//getName方法
String name=f1.getName();
System.out.println(name);//输出文件名,不管路径写的是绝对的还是相对的
//length方法
long l=f1.length();
System.out.println(l);//输出文件字节
//exists方法
System.out.println(f1.exists());//返回一个boolean值,表达文件是否存在
//isDirectory方法
System.out.println(f1.isDirectory());//返回一个boolean值,表示这个路径是否为一个目录(文件夹)
//isFile方法
System.out.println(f1.isFile());//返回一个boolean值,表示这个路径是否为一个文件
//createNewFile,创建新一个文件
File f4=new File(File.separator+"Users"+File.separator+"dudududu"+File.separator+"Desktop"+File.separator+"ddd.html");
try {
boolean b1=f4.createNewFile();
System.out.println(b1);
} catch (IOException e) {
System.out.println("创建文件出错");
e.printStackTrace();
}
//mkdir只可以创建单级文件夹
File f5=new File(File.separator+"Users"+File.separator+"dudududu"+File.separator+"Desktop"+File.separator+"myFileFolder");
boolean b2=f5.mkdir();
System.out.println(b2);
//mkdirs可以创建多级文件夹
File f6=new File(File.separator+"Users"+File.separator+"dudududu"+File.separator+"Desktop"+File.separator+"myFileFolder2"+File.separator+"myFileFolder3");
boolean b3=f6.mkdirs();
System.out.println(b3);
结果
ttt.html
511
true
false
true
true
true
true
我们看一下桌面的文件创建情况:(由于还有其他文件我只展示了一部分桌面)
剩下的一些常用方法
//delete方法法可以删除路径上的文件或者文件夹,当文件夹中有内容时,不会删除返回false
boolean b4=f4.delete();
System.out.println(b4);
boolean b5=f5.delete();
System.out.println(b5);
//list方法,返回一个String数组,包含路径下文件夹里所有文件夹和文件的名称
File f7=new File(File.separator+"Users"+File.separator+"dudududu"+File.separator+"Desktop"+File.separator+"工具");
String[] array=f7.list();//list只能遍历目录,不可以遍历一个文件
for(String filename:array)
{
System.out.println(filename);
}
结果
true
false
计算机网络:自顶向下方法.原书第6版.pdf
MATLAB_R2018a.app
instruction-book-0304.pdf
VirtualBox
计算机网络
reserch report
BaiduNetdisk_mac.app
西南大学疫情管控系统
Java第十版.pdf
操作系统作业
Windows
多媒体.pdf
我们来看一下啊我桌面上面的工具文件夹里面的文件,验证list方法:
FileFilter
以上就是File类对象的创建与一些常用方法,下面介绍一个好用的类,FileFilter。
FileFilter是一个接口,并且没有实现类,我们必须自己定义,重写 FileFilter中的accept方法。
方法作用:过滤文件。
方法参数:使用listFiles方法遍历目录,得到的每一个对象
方法的过滤规则:返回false代表不是目标文件,并且返回false后,该文件不会保存在文件数组中,这样起到了过滤的作用
我们来看一下怎么实现一个文件的过滤(用了迭代的思想)
main函数
public static void main(String[] args) {
File file =new File("/Users/dudududu/Desktop/工具");
getAllFile(file);
}
public static void getAllFile(File dir)
{
//listFile方法会把遍历得到的每一个File对象传递参数给accept方法
File[] files=dir.listFiles(new FileFilterImpl());
//listFiles方法,返回一个File类型的数组,会把路径一起打印出来
//listFiles传递了一个FileFilter的实现类参数
for(File f:files) {
if(f.isDirectory())
{
//方法迭代,避免有的文件在文件夹中检测不到
getAllFile(f);
}
else {
System.out.println(f);
}
}
}
FileFilter的实现类的代码
public class FileFilterImpl implements FileFilter {
@Override
public boolean accept(File pathname) {
if(pathname.isDirectory())
{
return true;//若是文件夹就返回true,在getAllFile中继续遍历
}
return pathname.getName().toLowerCase().endsWith(".docx");//遇到工具文件夹中所有的docx文件才返回true
}
}
结果(为了方便展示,我把工具文件夹清理了一下)
/Users/dudududu/Desktop/工具/操作系统作业/Assignment/222018321062069高飞翔Assignment-2.docx
/Users/dudududu/Desktop/工具/操作系统作业/Assignment/222018321062069高飞翔assingnment6.docx
/Users/dudududu/Desktop/工具/操作系统作业/Assignment/222018321062069高飞翔assignment5.docx
/Users/dudududu/Desktop/工具/操作系统作业/Assignment/222018321062069高飞翔Assignment-3.docx
/Users/dudududu/Desktop/工具/操作系统作业/Assignment/222018321062069高飞翔Assignment-4.docx
/Users/dudududu/Desktop/工具/操作系统作业/Assignment/222018321062069高飞翔Assignment-1.docx
我们再来看一下工具文件夹检测结果
这次更新就到这里了。下次更新IO流的知识