File我们出看可能会根据字面意思理解为文件,其实它既代表文件又代表目录。

这里有一个例子可以列出指定目录下的所有文件或目录, 以及我们可以过滤得到我们想要的文件

import java.io.File;
import java.io.FilenameFilter;
import java.lang.ref.PhantomReference;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;class DirFilter implements FilenameFilter{private Pattern pattern;public DirFilter(String regex){pattern = Pattern.compile(regex);}@Overridepublic boolean accept(File dir, String name) {return pattern.matcher(name).matches();}}
public class Test{public static void main(String[] args) {File path = new File("/home/estar/Test");String[] list = path.list();System.out.println("输出全部文件或目录:");for (String s : list) {System.out.println(s);}System.out.println("输出以.java结尾的文件或目录");list = path.list(new DirFilter(".*\\.java"));  //只列出以.java结尾的文件for (String s : list) {System.out.println(s);}System.out.println("匿名内部类实现");list = path.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {Pattern pattern = Pattern.compile(".*\\.java");return pattern.matcher(name).matches();}});for (String s : list) {System.out.println(s);}}
}
输出:
输出全部文件或目录:
a.java
cd
e.txt
b.java
c.java
d.java
输出以.java结尾的文件或目录
a.java
b.java
c.java
d.java
匿名内部类实现
a.java
b.java
c.java
d.java

  

更加实用的工具类:

import java.io.File;
import java.io.FilenameFilter;
import java.io.ObjectInputStream.GetField;
import java.lang.ref.PhantomReference;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;class FileUtils{//获得本地指定目录下的,指定格式的目录列表public static File[] local(File dir, final String regex) {return dir.listFiles(new FilenameFilter() {Pattern pattern = Pattern.compile(regex);@Overridepublic boolean accept(File dir, String name) {return pattern.matcher(new File(name).getName()).matches();}});}public static File[] local(String dir, String name) {return local(new File(dir), name);}public static class TreeInfo implements Iterable<File> {List<File> files = new ArrayList<File>();List<File> dirs = new ArrayList<File>();public void addAll(TreeInfo info) {files.addAll(info.files);dirs.addAll(info.dirs);}@Overridepublic Iterator<File> iterator() {return files.iterator();}@Overridepublic String toString() {return files.toString() + "\n" + dirs.toString();}}//得到所有目录public static TreeInfo getInfo(String path, String regex) {return recurseDirs(new File(path), regex);}public static TreeInfo getInfo(File path, String regex) {return recurseDirs(path, regex);}public static TreeInfo getInfo(String path) {return recurseDirs(new File(path), ".*");}public static TreeInfo getInfo(File path) {return recurseDirs(path, ".*");}//递归调用然后获得信息public static TreeInfo recurseDirs(File startDir, String regex){TreeInfo result = new TreeInfo();for (File item : startDir.listFiles()) {if (item.isDirectory()) {result.dirs.add(item);result.addAll(recurseDirs(item, regex));} else {//System.out.println("item : = " + item);if (item.getName().matches(regex)) {result.files.add(item);}}}return result;}
}
public class Test{public static void main(String[] args) {System.out.println(Arrays.asList(FileUtils.local(new File("/home/estar/Test"), ".*\\.java")));System.out.println("指定目录下的所有目录:");System.out.println(FileUtils.getInfo(new File("/home/estar/Test")).dirs);System.out.println("指定目录下的所有文件:");System.out.println(FileUtils.getInfo("/home/estar/Test").files);System.out.println("指定目录下的所有内容:");System.out.println(FileUtils.getInfo("/home/estar/Test"));System.out.println("指定目录下的,特定文件:");System.out.println(FileUtils.getInfo(new File("/home/estar/Test"), ".*\\.java").files);}
}输出:
[/home/estar/Test/a.java, /home/estar/Test/b.java, /home/estar/Test/c.java, /home/estar/Test/d.java]
指定目录下的所有目录:
[/home/estar/Test/cd]
指定目录下的所有文件:
[/home/estar/Test/a.java, /home/estar/Test/cd/q.java, /home/estar/Test/e.txt, /home/estar/Test/b.java, /home/estar/Test/c.java, /home/estar/Test/d.java]
指定目录下的所有内容:
[/home/estar/Test/a.java, /home/estar/Test/cd/q.java, /home/estar/Test/e.txt, /home/estar/Test/b.java, /home/estar/Test/c.java, /home/estar/Test/d.java]
[/home/estar/Test/cd]
指定目录下的,特定文件:
[/home/estar/Test/a.java, /home/estar/Test/cd/q.java, /home/estar/Test/b.java, /home/estar/Test/c.java, /home/estar/Test/d.java]

  

Java I/O学习——File相关推荐

  1. Java IO流学习总结二:File

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54581478 本文出自[赵彦军的博客] Java IO流学习总结一:输入输出流 J ...

  2. Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter

    Java IO流学习总结四:缓冲流-BufferedReader.BufferedWriter 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/det ...

  3. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

  4. Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

    Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...

  5. Java IO流学习总结七:Commons IO 2.5-FileUtils

    Java IO流学习总结七:Commons IO 2.5-FileUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/5497 ...

  6. Java IO流学习总结六:ByteArrayInputStream、ByteArrayOutputStream

    Java IO流学习总结六:ByteArrayInputStream.ByteArrayOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ar ...

  7. 201671010117 2016-2017-2 《Java程序设计》Java第二周学习心得

    Java第二周学习心得 这一周老师在周四进行了课堂测验,完全出乎我的意料,我以为老师会在前两周上课讲一下,由于我在课前没有好好准备,反转课堂来的有的措手不及,那些题很多很多都不会,也错了很多,班上有很 ...

  8. java IO(一):File类

    1.File类简介 File类位于java.io包中.它面向文件层次级别操作.查看文件,而字节流.字符流操作数据时显然比之更底层. 学习File类包括以下几个重点:文件路径.文件分隔符.创建文件(目录 ...

  9. java程序员学习路线以及我的学习经验

    本文作者为优知学院创始人陈睿(mike),作者有10年以上技术&产品经验,曾任百度研发经理.携程定制旅游CTO. " 这是一篇完整的java程序员学习线路图,一共分为六个阶段. 我以 ...

最新文章

  1. 【数据结构】顺序表的应用(1)(C语言)
  2. python使用教程pandas-「Python」pandas入门教程
  3. 线程阻塞的概念 (Java 中的睡眠状态sleep 等待状态wait 礼让状态yield 自闭状态join suspend() 和 resume() )
  4. Python之父重回决策层,社区治理新方案!
  5. 卸载mysql 安装_MySQL萌新第一季 第二话
  6. Mercurial(Hg)基本操作
  7. 【渝粤教育】国家开放大学2018年秋季 2006T经济数学基础12 参考试题
  8. 排序算法 --- 堆排序
  9. JS中的Map和Set实现映射对象
  10. 树莓派 libcurl安装
  11. Zookeeper四字监控命令使用总结
  12. 自变量/解释变量/因变量/响应变量/协变量等变量相关概念探析
  13. django之admin调整页面展示
  14. “海潮效应”侵袭厨电市场,品牌突围时不我待
  15. 什么叫单模光纤_单模光纤和多模光纤有什么区别
  16. 全球及中国企业社交网络行业渠道营销分析及市场全面调研报告2021-2027年
  17. 干货分享|被PubMed收录的论文,在MEDLINE和SCIE能检索到吗?
  18. linux hba查看,各操作系统查看HBA和WWN的方法
  19. element ui input限制输入6位数字(短信验证码)
  20. 倍加福耦合器KFD2-BR-1.PA.1500

热门文章

  1. PAT 1017 Queueing at Bank[一般]
  2. Django基础之Form
  3. java数据类型和运算优先级
  4. 从hadoop-0.20.2升级到hadoop-1.0.3
  5. JPBC库只使用椭圆曲线群,不使用双线性性质。找单位元,逆元等
  6. 终于有人把正态分布和二八法则讲明白了
  7. 怎么调节手机的刷新率_二分钟科普:手机上的“高刷新率”
  8. 几年不联系的前女友,加我就为说这……
  9. 你这样的“垃圾“,就应该进入老年代!!!
  10. 为什么 0.1 + 0.2 = 0.300000004