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 }

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

 

原文地址:https://www.cnblogs.com/xidongyu/p/5378508.html