《Java编程思想》学习笔记10——文件和目录常用操作

来源:互联网 发布:关于c语言的书那本最好 编辑:程序博客网 时间:2024/05/23 16:56

1.文件目录的List操作:

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

[java] view plaincopy
  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.         File path = new File(“.”);  
  8.         String[] list;  
  9.         //如果没有指定参数,则将目录中文件全部列出  
  10.         if(args.length == 0){  
  11.     list = path.list();  
  12. }  
  13. //指定了参数,则根据指定文件名过滤符合条件的文件  
  14. else{  
  15.     list = path.list(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()方法遍历给定的目录:

[java] view plaincopy
  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.     TreeInfo result = 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.文件和目录的其他操作:

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

[java] view plaincopy
  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.     File old = new File(“oldFile”);  
  23.     File new = new File(“newFile”);  
  24.     old.renameTo(new);  
  25.     fileData(old);  
  26.     fileData(new);  
  27.     File d = 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. }  
0 0
原创粉丝点击