1.文件目录的List操作:

Java中,File类其实代表文件的路径,它既可以代表一个特定文件的文件,也可以代表一个包含多个文件的目录名称。如果File代表目录,可以使用List列出目录中文件。

1. import  java.util.regex.*;  
2. import  java.io.*;  
3. import  java.util.*;  
4. public class DirList{  
5. public static void main(String[] args){  
6. //当前目录  
7. new File(“.”);  
8.         String[] list;  
9. //如果没有指定参数,则将目录中文件全部列出  
10. if(args.length == 0){  
11.     list = path.list();  
12. }  
13. //指定了参数,则根据指定文件名过滤符合条件的文件  
14. else{  
15. new DirFilter(args[0]));  
16. }  
17. Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);  
18. for(String dirItem : list){  
19.     System.out.println(dirItem);  
20. }  
21. }  
22. }  
23. class DirFilter implements FilenameFilter{  
24. private Pattern pattern;  
25. public DirFilter(String regex){  
26. //将输入的命令行参数编译为正则表达式的模式串  
27.         pattern = Pattern.compile(regex);  
28. }  
29. //File的List方法回调方法  
30. public boolean accept(File dir, String name){  
31. //使用正则表达式匹配给定目录下的文件名  
32. return pattern.matcher(name).matches();  
33. }   
34. }



命令行输入参数:“*\.java”

输出结果如下:

DirFilter.java

DirList.java

2.java中除了File类可以表示文件的路径外,还可以表示目录的路径,可以通过File的isDirectory判断File对象是一个文件还是一个目录。

如下的例子通过local()方法列出给定目录中符合条件的文件/目录名称,walk()方法遍历给定的目录:


    1. import java.util.regex.*;  
    2. import java.io.*;  
    3. import java.util.*;  
    4.   
    5. public final class Directory{  
    6. //列出目录中符合条件的文件名  
    7. public static File[] local(File dir, final String regex){  
    8. return dir.listFiles(new FilenameFilter(){  
    9. private Pattern pattern = Pattern.compile(regex);  
    10. public Boolean accept(File dir, String name){  
    11. return pattern.matcher(new File(name).getName()).matches();  
    12. }  
    13. });  
    14. }  
    15. //重载列出目录下符合条件的文件名方法  
    16. public static File[] local(String path, final String regex){  
    17. return local(new File(path), regex);  
    18. }   
    19. //代表文件树信息的静态内部类  
    20. public static class TreeInfo implements Iterable<File>{  
    21. public List<File> files = new ArrayList<File>();  
    22. public List<File> dirs = new ArrayList<File>();  
    23. //默认的迭代器方法,跌倒文件树元素对象  
    24. public Iterator<File> iterator(){  
    25. return files.iterator();  
    26. }   
    27. void addAll(TreeInfo other){  
    28.     files.addAll(other.files);  
    29.     dirs.addAll(other.dirs);  
    30. }  
    31. public String toString(){  
    32. return “dirs: ” + dirs + “\n\nfiles: ” + files;  
    33. }  
    34. }  
    35. //从指定的文件/目录开始遍历符合条件的文件  
    36. public static TreeInfo walk(String start, String regex){  
    37. return recurseDirs(new File(start), regex);  
    38. }  
    39. //重载遍历文件/目录方法  
    40. \public static TreeInfo walk(File start, String regex){  
    41. return recurseDirs(start, regex);  
    42. }  
    43. //默认的指定文件/目录查找任何文件名的文件  
    44. public static TreeInfo walk(File start){  
    45. return recurseDirs(start, “.*”);  
    46. }  
    47. //重载默认的查找任何文件的方法  
    48. public static TreeInfo walk(String start){  
    49. return recurseDirs(new File(start), “.*”);  
    50. }   
    51. //从指定的文件/目录开始遍历,查找符合条件的文件名  
    52. static TreeInfo recurseDirs(File startDir, String regex){  
    53. new TreeInfo();  
    54. for(File item : startDir.listFiles()){  
    55. //如果遍历的文件是目录      
    56. if(item.isDirectory()){  
    57.     result.dirs.add(item);  
    58. //迭代子目录  
    59.     result.addAll(recurseDirs(item, regex));  
    60. }  
    61. //如果遍历的的文件是普通文件  
    62. else{  
    63. if(item.getName().matches(regex)){  
    64.         result.files.add(item);  
    65. }  
    66. }  
    67. }  
    68. return result;  
    69. }  
    70. }



    3.文件和目录的其他操作:

    文件和目录除了常规的查找和遍历操作意外,还有很多其他的操作,例如:创建、删除、判断文件/目录是否已存在,获取文件/目录的绝对路径,获取文件/目录的权限等等,下面的小例子就展示文件/目录的这些操作:

    1. import java.io.*;  
    2. public class MakeDirectories{  
    3. //获取文件/目录的基本信息  
    4. private static void fileData(File f){  
    5.         System.out.println(  
    6.     “Absolute path: ” + f.getAbsolutePath() +  
    7.     “\n Can read: ” + f.canRead() +  
    8.     “\n Can write: ” + f.canWrite() +  
    9.     “\n getName: ” + f.getName() +   
    10.     “\n getParent: ” + f.getParent() +  
    11.     “\n getPath: ” + f.getPath() +  
    12.     “\n length: ” + f.length() +  
    13.     “\n lastModified: ” + f.lastModifed());  
    14. if(f.isFile()){  
    15.     System.out.println(f.getName() + “ is a file”);  
    16. }  
    17. else if(f.isDirectory()){  
    18. System.out.println(f.getName() + “ is a directory”);  
    19. }  
    20. }  
    21. public static void main(String[] args){  
    22. new File(“oldFile”);  
    23. new = new File(“newFile”);  
    24. new);  
    25.     fileData(old);  
    26. new);  
    27. new File(“/test”);  
    28. if(d.exists()){  
    29.     System.out.println(“Deleting …” + d);  
    30.     d.delete();  
    31. }  
    32. else {  
    33.     System.out.prinln(“Creating…” + d);  
    34.     d.mkdirs();  
    35. }  
    36. }  
    37. }