文章由来:学习笔记

File是JDK官方提供的一个类,可以对操作系统的文件增删改查的操作,在 package java.io中,有丰富的方法可以使用。

1.使用File 创建一个文件,创建一个文件目录

 其中mkdirs()可以创建多级文件目录,而mkdir()只创建出当前一级的文件目录。

File file = new File("D:\\test\\abc\\a.txt");
if(!file.exists()){
   file.mkdirs();//创建出文件夹
}

 createNewFile()可以创建文件但是不能创建目录,如果存在同名文件则不会再创建

// 创建出文件a.txt
File file = new File("D:\\test\\abc\\a.txt");
file.createNewFile();

2.根据目录路径创建出多级文件夹和文件

// 根据url路径创建出多级文件夹和文件
    String pathUrl = "D:\\test\\abc\\bc\\a.txt";
    int lastIndexOf = pathUrl.lastIndexOf("\\");
    // 截取出最后的a.txt文件,获得文件目录
    String dirPath = pathUrl.substring(0, lastIndexOf);
    File file = new File(dirPath);
    if (!file.exists()) {
        //创建出多级目录
        file.mkdirs();
    }
    File fileText = new File(pathUrl);
    boolean newFile = fileText.createNewFile();

3.使用File修改文件名

renameTo()不光可以修改文件名还可以剪切移动文件或者文件目录。

File file = new File("D:\\test\\a.txt");
       File newfile = new File("D:\\test\\b.txt");
       if(file.renameTo(newfile)){
          System.out.println("重命名成功...");
       }
// 移动文件目录或者文件
        File file = new File("D:\\test\\bc");
        File newfile = new File("D:\\test\\abc\\bc");
        if(file.renameTo(newfile)){
            System.out.println("将bc这个文件夹剪切到abc这个文件夹下");
        }

4.使用File删除一个文件

delete()删除文件只能一个个删除,如果文件目录下还有子目录或者子文件是删除不成功的。

File file = new File("D:\\test\\abc\\a.txt");
 if(file.delete()){
     System.out.println("删除成功!!!");
 }

5.拷贝文件

使用java.nio.file包下面的Files.copy()实现文件的拷贝,存在问题如果拷贝文件目录,无法拷贝文件目录下的文件,相当于`浅拷贝`了。

File sourceFile = new File("D:\\test\\abc\\a.txt");
 File targetFile = new File("D:\\test\\abc\\b.txt");
 Files.copy(sourceFile.toPath(), targetFile.toPath());

6.筛选出某个文件目录下的指定后缀文件

listFiles()可以获得文件目录下的所有文件和文件目录包括所有子目录list()可以获得当前文件目录下的所有文件名

public static void main(String[] args) throws IOException {
    String pathUrl = "D:\\abc";
    File file = new File(pathUrl);
    //获取当前文件夹下的文件和文件目录的名称
    String[] list = file.list();
    //找出当前目录下 .jar .zip文件
    JarFilter jarFilter = new JarFilter();
    ArrayList<List<String>> allJarOrZip = new ArrayList<>();
    HashMap<String, List> map = new HashMap<>();
    //可重写接口,根据自己需求筛选出想要的文件,如.xlsx .png 
    FilenameFilter filenameFilter = (dir, name) -> {
        String var3 = name.toLowerCase();
        return  var3.endsWith(".xlsx");
    };
    FileFilter(file,filenameFilter,map);
    System.out.println(map);
}

/**
 * @Description: 遍历指定路径下某些文件
 * @Data:[file, jarFilter, allJarOrZip]
 * @return: void
 * @Author: NiKaBoy
 * @Email: 123456789@qq.com
 * @Date: 22-09-258 22:13:52
 */
public static void FileFilter(File file,FilenameFilter jarFilter,Map<String, List> allJarOrZip){
    File[] files = file.listFiles(jarFilter);
    if(files == null){
        return;
    }
    if(files.length > 0){
        List<String> collect = Arrays.stream(files).map(f -> f.getName()).collect(Collectors.toList());
        allJarOrZip.put(file.getPath(),collect);
    }
    File[] roots = file.listFiles();
    for (int i = 0; i < roots.length; i++) {
        File root = roots[i];
        FileFilter(root,jarFilter,allJarOrZip);
    }
}