java 编程思想 Directory工具类

  1 package net.bigwrok;
  2
  3 import java.io.File;
  4 import java.io.FilenameFilter;
  5 import java.io.IOException;
  6 import java.util.ArrayList;
  7 import java.util.Iterator;
  8 import java.util.List;
  9 import java.util.regex.Pattern;
 10
 11 public class Directory_util {
 12     /*工具类 遍历当前目录的所有文件,可以查看所有 目录 ,以及文件
 13
 14     */
 15     public static File[] local(File dir,final String reg){
 16         //遍历当前目录的文件
 17         return dir.listFiles(new FilenameFilter() {
 18             //文件名过滤器
 19             private Pattern p = Pattern.compile(reg);
 20             @Override
 21             public boolean accept(File dir, String name) {
 22                  System.out.println(dir+"  "+name);
 23                 return p.matcher(name).matches();
 24                 //ret name.endsWith("java");
 25             }
 26         });//return
 27     }//local
 28
 29
 30     //遍历当前目录的文件
 31     public static File[] local(String path,final String reg){
 32         return local(new File(path),reg);
 33     }
 34     //内部类  files保存 所有文件的  dirs保存所有的目录
 35     public static class TreeInfo implements Iterable<File>{
 36         public List<File> files  =  new ArrayList<File>();
 37         public List<File> dirs  =  new ArrayList<File>();
 38         @Override
 39         public Iterator<File> iterator() {
 40             return files.iterator();
 41         }
 42
 43         void addAll(TreeInfo other){
 44             files.addAll(other.files);
 45             dirs.addAll(other.dirs);
 46         }
 47
 48         @Override
 49         public String toString() {
 50             // 格式化打印
 51             //return "dirs: " +dirs+"\n\nfiles: "+files;
 52             return "dirs: " +PPrint.pformat(dirs)+"\n\nfiles: "+PPrint.pformat(files);
 53         }
 54
 55     }//静态内部类class TreeInfo  结束
 56
 57     static TreeInfo recurseDirs(File startDir ,String reg){
 58         TreeInfo result = new TreeInfo();
 59         for (File item : startDir.listFiles()) {
 60             if (item.isDirectory()) {
 61                 //如果是目录,目录列表dirs增加 item,目录下面所有的文件都放进result
 62                 result.dirs.add(item);
 63                 result.addAll(recurseDirs(item,reg));
 64             }else {
 65                 if (startDir.getName().matches(reg)) {
 66                     // getName()获得文件名称,仅仅是文件名 不包括目录  如:xxxx.java
 67                     result.files.add(item);
 68                 }
 69             }
 70         }//for
 71         return result;
 72
 73     }//recurseDirs 方法结束
 74        // walk 从当前目录一直遍历所有文件
 75     public static TreeInfo walk(String start ,String reg){
 76         return recurseDirs(new File(start), reg);
 77     }
 78
 79
 80     public static TreeInfo walk(File start ,String reg){
 81         return recurseDirs( start , reg);
 82     }
 83
 84
 85     public static TreeInfo walk(String start  ){
 86         return recurseDirs(new File(start), ".*");
 87     }
 88
 89
 90     public static TreeInfo walk(File start ){
 91         return recurseDirs( start , ".*");
 92     }
 93
 94
 95
 96     public static void main(String[] args) throws IOException {
 97         File test = new File(".");
 98         System.out.println("绝对路径   "+test.getAbsolutePath());
 99         System.out.println("抽象路径   "+test.getCanonicalPath());
100         TreeInfo str = walk( "D:\\dev2\\workspace\\seehope\\bigwork\\src\\com\\");
101         System.out.println(str);
102         /*
103         files: [D:\dev2\workspace\seehope\bigwork\src\com\ColorChoseListener.java,
104                 D:\dev2\workspace\seehope\bigwork\src\com\ReadImg.java,
105                 D:\dev2\workspace\seehope\bigwork\src\com\TrueFrametest.java]
106                         */
107
108         TreeInfo str2 = walk( test);
109         System.out.println(str2);
110
111        /*
112         dirs: [.\.settings, .\bin, .\bin\c2, .\bin\com, .\bin\net, .\bin\net\bigwrok, .\src, .\src\c2, .\src\com, .\src\net, .\src\net\bigwrok]
113
114         files: [.\.classpath, .\.project, .\.settings\org.eclipse.jdt.core.prefs, .\bin\c2\Draw2.class, .\bin\c2\Drawing$1.class, .\bin\c2\Drawing.class, .\bin\c2\f.jpg, .\bin\c2\MymenuAdapter.class, .\bin\c2\MyMenuItemAction.class, .\bin\c2\MyStrokeAction.class, .\bin\c2\ShapeAndColor.class, .\bin\c2\TrueFrametest$1.class, .\bin\c2\TrueFrametest$2.class, .\bin\c2\TrueFrametest$3.class, .\bin\c2\TrueFrametest.class, .\bin\com\ColorChoseListener.class, .\bin\com\Draw2.class, .\bin\com\MymenuAdapter.class, .\bin\com\MyMenuItemAction.class, .\bin\com\MyStrokeAction.class, .\bin\com\ReadImg.class, .\bin\com\ShapeAndColor.class, .\bin\com\TrueFrametest$1.class, .\bin\com\TrueFrametest$2.class, .\bin\com\TrueFrametest$3.class, .\bin\com\TrueFrametest$4.class, .\bin\com\TrueFrametest.class, .\bin\net\bigwrok\Directory_util$1.class, .\bin\net\bigwrok\Directory_util$TreeInfo.class, .\bin\net\bigwrok\Directory_util.class, .\bin\net\bigwrok\InetAddrTest.class, .\bin\net\bigwrok\InetAddrTest2.class, .\bin\net\bigwrok\IO1.class, .\bin\net\bigwrok\Test2_net.class, .\bin\net\bigwrok\Test_net2.class, .\src\c2\Drawing.java, .\src\c2\f.jpg, .\src\c2\TrueFrametest.java, .\src\com\ColorChoseListener.java, .\src\com\ReadImg.java, .\src\com\TrueFrametest.java, .\src\net\bigwrok\Directory_util.java, .\src\net\bigwrok\InetAddrTest.java, .\src\net\bigwrok\InetAddrTest2.java, .\src\net\bigwrok\IO1.java, .\src\net\bigwrok\Test2_net.java, .\src\net\bigwrok\Test_net2.java]
115
116         */
117         /*
118         for (File file : Directory_util.walk(".", ".*[Zz].*\\.java")) {
119             System.out.println(file);
120         }
121         walk(start,reg);
122         ".*[Zz].*\\.java"      文件以.java结尾
123         "T.*"                  T开头的任何文件
124         "T.*\\.java"           T开头的.java文件
125         */
126     }
127
128
129
130 }

打印工具类PPrint

 1 package net.bigwrok;
 2
 3 import java.util.Arrays;
 4 import java.util.Collection;
 5
 6 public class PPrint {
 7
 8
 9
10     public static String pformat(Collection<?> c){
11         if (c.size() == 0) {
12             return "[]";
13         }
14
15         StringBuilder res = new StringBuilder("[");
16         for (Object elem : c) {
17             if (c.size() != 1) {
18                 res.append("\n");
19             }
20             res.append(elem);
21         }//for
22
23         if (c.size() != 1) {
24             res.append("\n");
25         }
26         res.append("]");
27         return res.toString();
28     }//pformat
29
30
31     public static void pprint(Collection<?> c){
32         System.out.println(pformat(c));
33     }
34
35
36     public static void pprint(Object[] c){
37         System.out.println(Arrays.asList(c));
38     }
39
40
41
42
43
44 }

运行结果

files: [
.\.classpath
.\.project
.\.settings\org.eclipse.jdt.core.prefs
.\bin\c2\Draw2.class
.\bin\c2\Drawing$1.class
.\bin\c2\Drawing.class
.\bin\c2\f.jpg
.\bin\c2\MymenuAdapter.class
.\bin\c2\MyMenuItemAction.class
.\bin\c2\MyStrokeAction.class
.\bin\c2\ShapeAndColor.class
.\bin\c2\TrueFrametest$1.class
.\bin\c2\TrueFrametest$2.class
.\bin\c2\TrueFrametest$3.class
.\bin\c2\TrueFrametest.class
.\bin\com\ColorChoseListener.class
.\bin\com\Draw2.class
.\bin\com\MymenuAdapter.class
.\bin\com\MyMenuItemAction.class
.\bin\com\MyStrokeAction.class
.\bin\com\ReadImg.class
.\bin\com\ShapeAndColor.class
.\bin\com\TrueFrametest$1.class
.\bin\com\TrueFrametest$2.class
.\bin\com\TrueFrametest$3.class
.\bin\com\TrueFrametest$4.class
.\bin\com\TrueFrametest.class
.\bin\net\bigwrok\Directory_util$1.class
.\bin\net\bigwrok\Directory_util$TreeInfo.class
.\bin\net\bigwrok\Directory_util.class
.\bin\net\bigwrok\InetAddrTest.class
.\bin\net\bigwrok\InetAddrTest2.class
.\bin\net\bigwrok\IO1.class
.\bin\net\bigwrok\IO2.class
.\bin\net\bigwrok\PPrint.class
.\bin\net\bigwrok\Test2_net.class
.\bin\net\bigwrok\Test_net2.class
.\src\c2\Drawing.java
.\src\c2\f.jpg
.\src\c2\TrueFrametest.java
.\src\com\ColorChoseListener.java
.\src\com\ReadImg.java
.\src\com\TrueFrametest.java
.\src\net\bigwrok\Directory_util.java
.\src\net\bigwrok\InetAddrTest.java
.\src\net\bigwrok\InetAddrTest2.java
.\src\net\bigwrok\IO1.java
.\src\net\bigwrok\IO2.java
.\src\net\bigwrok\PPrint.java
.\src\net\bigwrok\Test2_net.java
.\src\net\bigwrok\Test_net2.java
]

原文地址:https://www.cnblogs.com/kwaitfort/p/9126897.html

时间: 2024-11-09 11:41:59

java 编程思想 Directory工具类的相关文章

Java编程思想(四) —— 复用类

看了老罗罗升阳的专访,情不自禁地佩服,很年轻,我之前以为和罗永浩一个级别的年龄,也是见过的不是初高中编程的一位大牛之一,专访之后,发现老罗也是一步一个脚印的人.别说什么难做,做不了,你根本就没去尝试,也没有去坚持. If you can't fly then run,if you can't run then walk, if you can't walk then crawl,but whatever you do,you have to keep moving forward--Martin

Java编程思想之七复用类

复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须做更多的事情. 使用类而不破坏程序代码: 在新类中产生现有对象.由于新的类是由现有类的对象组成,所有这种方法称为组合. 按照现有类的类型来创建新类.无需改变现有类的形式,采用现有类的形式并在其中添加新代码.这种方法是继承. 7.1 组合语法 组合只需要将对象引用置于新类中就可以了. 但编译器并不是简单的为每一个引用都创建默认对象.如果想初始化这些引用,可以在代码中下列位置进行:

Java编程思想:嵌套类

public class Test { public static void main(String[] args) { // Parcell11.test(); // ClassInterface.Test.test(); TestBed.Tester.test(); } } /* 嵌套类和普通的内部类还有一个区别.普通的内部类的字段和方法,只能放在类的外部 层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类.但 是嵌套类可以包含这些东西 */ interfac

Java编程思想(五) —— 多态(上)

上一章,Java编程思想(四) -- 复用类里面讲到了向上转型,感觉和多态放在一起写更好. 多态,polymorphism.一个重要的特性,篇幅太长了,分上下两篇写. (1)向上转型 class TV{ public static void show(TV tv){ System.out.println("TV"); } } public class LeTV extends TV{ public static void main(String[] args) { LeTV letv

33.JAVA编程思想——JAVA IO File类

33.JAVA编程思想--JAVA IO File类 RandomAccessFile用于包括了已知长度记录的文件.以便我们能用 seek()从一条记录移至还有一条:然后读取或改动那些记录. 各记录的长度并不一定同样:仅仅要知道它们有多大以及置于文件何处就可以. 首先.我们有点难以相信RandomAccessFile 不属于InputStream 或者OutputStream 分层结构的一部分.除了恰巧实现了DataInput 以及DataOutput(这两者亦由 DataInputStream

《Java编程思想》学习01:普通类的初始化加载顺序分析

<Java编程思想>学习01:普通类的初始化加载顺序分析 本文根据控制变量法,分析普通类(没有extends,implement)初始化的加载顺序: 参考<Java编程思想>第五章 源码 StaticClass1类 package com.tyj.study.thinkinjava; /* * *@Description: *@Author:TYJ *@Date: create in 2019/7/9 17:22 */ public class StaticClass1 { { S

52 java编程思想——创建窗口和程序片 程序片限制

52.java编程思想--创建窗口和程序片 程序片限制 出于安全缘故,程序片十分受到限制,并且有很多的事我们都不能做.您一般会问:程序片看起来能做什么,传闻它又能做什么:扩展浏览器中WEB 页的功能.自从作为一个网上冲浪者,我们从未真正想了解是否一个WEB 页来自友好的或者不友好的站点,我们想要一些可以安全地行动的代码.所以我们可能会注意到大量的限制: (1) 一个程序片不能接触到本地的磁盘.这意味着不能在本地磁盘上写和读,我们不想一个程序片通过WEB页面阅读和传送重要的信息.写是被禁止的,当然

《Java编程思想》第十三章 字符串

<Java编程思想>读书笔记 1.String作为方法的参数时,会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置,从未动过. 2.显式地创建StringBuilder允许预先为他指定大小.如果知道字符串多长,可以预先指定StringBuilder的大小避免多次重新分配的冲突. 1 /** 2 * @author zlz099: 3 * @version 创建时间:2017年9月1日 下午4:03:59 4 */ 5 public class UsingStringBuilder {

java 编程思想 22.11: java bean 案例代码

java 编程思想  22.11:   java bean 案例代码 thinking in java 4免费下载:http://download.csdn.net/detail/liangrui1988/7580155 package org.rui.swing.bean; import java.awt.Color; import java.awt.event.ActionListener; import java.awt.event.KeyListener; import org.rui.