File
中构造方法中File(file,string)传入父路径,和子路径
boolean delete() 删除此抽象路径名表示的文件或目录 只能删除空文件夹 删除文件时 文件不能被其他程序占用
boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
File getAbsoluteFile() 返回此抽象路径名的绝对路径名形式。
String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
String getName() 返回由此抽象路径名表示的文件或目录的名称。
String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
long length() 返回由此抽象路径名表示的文件的长度
String中的endswith方法判断后缀为什么的字符串
过滤器
实现fileNamefitor或者filefitor接口里面有参数我们可以试一试就知道什么意思了
package cn.jiedada.fileter; import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.Arrays; public class Test { /* * 文件过滤器 * 调用方法 * String[] list(FilenameFilter filter) 返回的字符串在该目录下的抽象路径名,满足指定的过滤器表示文件和目录命名数组。 File[] listFiles() 返回表示抽象路径名的目录中的文件的路径名表示抽象的数组。 File[] listFiles(FileFilter filter) 返回表示的抽象路径名的文件和目录的目录,这个抽象路径名满足指定过滤器表示数组。 File[] listFiles(FilenameFilter filter) 返回表示的抽象路径名的文件和目录的目录,这个抽象路径名满足指定过滤器表示数组。 * * */ public static void main(String[] args) { // TODO Auto-generated method stub File file = new File("f:/log"); MyFileFilter myFileFilter = new MyFileFilter("txt"); File[] listFiles = file.listFiles(myFileFilter); //当盘符错误时,我们输出的结果为null //System.out.println(Arrays.toString(listFiles)); //在listFiles(new FilenameFilter() 方法中实现了 /*public File[] listFiles(FilenameFilter filter) { String ss[] = list(); if (ss == null) return null; ArrayList<File> files = new ArrayList<>(); for (String s : ss) if ((filter == null) || filter.accept(this, s)) files.add(new File(s, this)); return files.toArray(new File[files.size()]); } 所以只需要覆写accept方法就可以了*/ File[] listFiles2 = file.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { // TODO Auto-generated method stub return name.endsWith("txt"); } }); System.out.println(Arrays.toString(listFiles2)); } } class MyFileFilter implements FileFilter{ String ends; public MyFileFilter(String ends) { super(); this.ends = ends; } @Override public boolean accept(File pathname) { // TODO Auto-generated method stub return pathname.getName().endsWith(ends); } }
或者自己实现原理通过把获取的文件转化为String递归判断endwiths方法
package cn.jiedada.tryanginhome; import java.io.File; import java.io.IOException; import java.util.ArrayList; public class Test2 { /*写一段代码完成一下功能:以你们接受每天我发给你们的资料的根目录为准, *找出其中的所有的视频文件,然后再一个新的路径下面创建对应的文件,暂时不考虑内容,只要有文件就行 例如:下面这样的效果,以20150421第一季为根目录 1首先考录自带的文件过滤器,因为自带的llistfiles方法是判断是文件夹下的,所以我们需要递归的方法(暂时不考虑) 2自己写一个方法用string的endwith方法判断是否包含后缀名*/ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File file = new File("D:\\JAVA上课学习内容\\2019-07-31-IO-DAY19"); ArrayList<File> arrayList = new ArrayList<File>(); select(file, arrayList); //得到数组 System.out.println(arrayList); ArrayList<String> arrayList2 = new ArrayList<String>(); File file2 = new File("f:/java学习资料"); //创建文件夹 file2.mkdirs(); for (File file3 : arrayList) { //获取文件的后缀名 String name = file3.getName(); //使用构造方法,指定父文件,传入名字 File file4 = new File(file2, name); file4.createNewFile(); } } public static void select(File file,ArrayList<File> arrayList){ if(file!=null){ if(file.isFile()){ //如果为文件的话我们判断后缀是否为avi if(file.getName().endsWith("avi")){ arrayList.add(file); } }else{ //如果为文件夹的话取出子文件及文件夹 File[] listFiles = file.listFiles(); for (File file2 : listFiles) { //递归调用 select(file2, arrayList); } } } } }
递归循环
做一个文件删除和保存删除的数据的方法
首先判断是不是文件,然后deletefng'fa方法,在文件夹中递归调用方法
再删除之前用一个容器存储数据
package cn.jiedada.tryanginhome; import java.io.File; import java.io.IOException; import java.util.ArrayList; public class Test1 { /* * 完成上课所提到的删除方法 【高级部分】:撤销删除(撤销上面刚删除的目录)功能 因为delete方法只能删除一个文件,不能有子文件所以我们想用递归的方法 撤回,我们需要判断是文件夹还是文件,分别在删除之前存放在一个容器里面 */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File file = new File("F:\\log"); //文件存放 ArrayList<File> arrayList1 = new ArrayList<File>(); //文件夹存放 ArrayList<File> arrayList2 = new ArrayList<File>(); delFile(file, arrayList1, arrayList2); System.out.println(arrayList1); System.out.println(arrayList2); //循环添加文件夹 for (File file2 : arrayList2) { file2.mkdirs(); } //添加文件 for (File file1 : arrayList1) { file1.createNewFile(); } } public static void delFile(File file,ArrayList<File> arrayList1,ArrayList<File> arrayList2){ if(file!=null){ if(file.isFile()){ //存放文件 arrayList1.add(file); //删除文件 file.delete(); }else{ //存放文件夹 arrayList2.add(file); File[] listFiles = file.listFiles(); if(listFiles.length!=0){ for (File file2 : listFiles) { //递归调用 delFile(file2, arrayList1, arrayList2); } } } } //递归删除文件夹 file.delete(); } }