• java中的File类


    File类

      java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类。它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑。对文件的真正操作,还得需要I/O流的实现。

    1.目录列表


      如果我们想查看某个目录下有那些文件和目录,我们可以使用File中提供的list方式来查看,这很像linux下的ls命令。

      查看E:/html文件夹下所有的php文件,执行的时候输入的参数为正则表达式

     1 package com.dy.xidian;
     2 
     3 import java.io.File;
     4 import java.io.FilenameFilter;
     5 import java.util.Arrays;
     6 import java.util.regex.Pattern;
     7 
     8 public class DirList {
     9     static File path = new File("E:/html");
    10     public static void main(String[] args) {
    11         String[] list;
    12         // 获取整个目录列表
    13         if (args.length == 0)
    14             list = path.list();
    15         else
    16             list = path.list(new DirFilter(args[0]));
    17         Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
    18         for (String string : list) {
    19             System.out.println(string);
    20         }
    21     }
    22 }
    23 
    24 class DirFilter implements FilenameFilter {
    25     private Pattern pattern;
    26     public DirFilter(String regex) {
    27         pattern = Pattern.compile(regex);
    28     }
    29 
    30     public boolean accept(File dir, String name) {
    31         // find匹配的是字符串的子序列,我们可以认为是不严格匹配
    32         return pattern.matcher(name).find();
    33     }
    34 }

    2.目录实用工具


      该工具有两个作用

    • 遍历所有目录及其子目录
    • 遍历目录下的文件以及其子目录下的文件
     1 package com.dy.xidian;
     2 
     3 import java.io.File;
     4 import java.io.FilenameFilter;
     5 import java.util.ArrayList;
     6 import java.util.Iterator;
     7 import java.util.List;
     8 import java.util.regex.Pattern;
     9 
    10 import net.mindview.util.PPrint;
    11 
    12 public final class Diractory {
    13     public static File[] local(File dir, final String regex) {
    14         return dir.listFiles(new FilenameFilter() {
    15             Pattern pattern = Pattern.compile(regex);
    16             @Override
    17             public boolean accept(File dir, String name) {
    18                 return pattern.matcher(new File(name).getName()).matches();
    19             }
    20         });
    21     }
    22 
    23     public static File[] local(String path, final String regex) {
    24         return local(new File(path), regex);
    25     }
    26 
    27     public static class TreeInfo implements Iterable<File> {
    28         public List<File> files = new ArrayList<File>();
    29         public List<File> dirs = new ArrayList<File>();
    30 
    31         @Override
    32         public Iterator<File> iterator() {
    33             return files.iterator();
    34         }
    35 
    36         void addAll(TreeInfo other) {
    37             files.addAll(other.files);
    38             dirs.addAll(other.dirs);
    39         }
    40 
    41         public String toString() {
    42             return "dirs: " + PPrint.pformat(dirs) + "
    
    files:"
    43                     + PPrint.pformat(files);
    44         }
    45     }
    46 
    47     public static TreeInfo walk(String start, String regex) {
    48         return recurseDirs(new File(start), regex);
    49     }
    50 
    51     public static TreeInfo walk(File start, String regex) {
    52         return recurseDirs(start, regex);
    53     }
    54 
    55     public static TreeInfo walk(File start) {
    56         return recurseDirs(start, ".*");
    57     }
    58 
    59     public static TreeInfo walk(String start) {
    60         return recurseDirs(new File(start), ".*");
    61     }
    62 
    63     public static TreeInfo recurseDirs(File startDir, String regex) {
    64         TreeInfo result = new TreeInfo();
    65         for (File file : startDir.listFiles()) {
    66             if (file.isDirectory()) {
    67                 result.dirs.add(file);
    68                 result.addAll(recurseDirs(file, regex)); //加入子目录信息
    69             } else if (file.getName().matches(regex))
    70                 result.files.add(file);
    71         }
    72         return result;
    73     }
    74 
    75     public static void main(String[] args) {
    76         if (args.length == 0)
    77             System.out.println(walk("."));
    78         else
    79             for (String arg : args) {
    80                 System.out.println(walk(arg));
    81             }
    82     }
    83 }
    View Code

      

    3.目录的检查及创建


      File的更倾向于对目录、文件属性的操作,比如路径,存在性,大小,修改时间、读/写权限等,对文件的内容并不关心。

      

     1 package com.dy.xidian;
     2 
     3 import java.io.File;
     4 
     5 public class MakeDirectories {
     6     private static void usage() {
     7         System.err.println("Usage: MakeDirectories path1...
    "
     8                 + "Creates each path
    "
     9                 + "Usage: MakeDirectories -d path1...
    " + "Delete each path
    "
    10                 + "Usage: MakeDirectories -r path1 path2
    "
    11                 + "Renames from path1 to path2");
    12         System.exit(1);
    13     }
    14 
    15     private static void fileData(File f) {
    16         System.out.println("Absolute path: " + f.getAbsolutePath()
    17                 + "
     Can read: " + f.canRead() + "
     Can write: "
    18                 + f.canWrite() + "
     getName: " + f.getName()
    19                 + "
     getParent: " + f.getParent() + "
     getPath: "
    20                 + f.getPath() + "
     length: " + f.length()
    21                 + "
     lastModified: " + f.lastModified());
    22         if (f.isFile())
    23             System.out.println("It is a file");
    24         else if (f.isDirectory())
    25             System.out.println("It is a directory");
    26     }
    27 
    28     public static void main(String args[]) {
    29         if (args.length < 1)
    30             usage();
    31         if (args[0].equals("-r")) {
    32             if (args.length != 3)
    33                 usage();
    34             //文件重命名,若文件名冲突,则命名函数执行失败
    35             File old = new File(args[1]), rname = new File(args[2]);
    36             old.renameTo(rname);
    37             fileData(old);
    38             fileData(rname);
    39             return;
    40         }
    41         int count = 0;
    42         boolean del = false;
    43         if (args[0].equals("-d")) {
    44             count++;
    45             del = true;
    46         }
    47         count--;
    48         while (++count < args.length) {
    49             File f = new File(args[count]);
    50             if (f.exists()) {
    51                 System.out.println(f + " existd");
    52                 if (del) {
    53                     System.out.println("deleting..." + f);
    54                     f.delete();
    55                 }
    56             } else if (!del) {
    57                 f.mkdirs();
    58                 System.out.println("create " + f);
    59             }
    60             fileData(f);
    61         }
    62     }
    63 }

      该代码能够进行目录/文件的创建,删除,重命名操作.

     

  • 相关阅读:
    动态加载方法(定时任务)
    安装 asp.net core 出错
    .NET:权限管理
    关于随机数
    博客园首弹
    C# MVC从其他系统获取文件流,显示文件
    Python中操作MySQL步骤
    MySql之_增删改查
    数据库之_SQL注入
    为什么上传到youtube上的视频很模糊
  • 原文地址:https://www.cnblogs.com/xidongyu/p/5378508.html
Copyright © 2020-2023  润新知