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. }