Java I/O学习——File
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相关推荐
- Java IO流学习总结二:File
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54581478 本文出自[赵彦军的博客] Java IO流学习总结一:输入输出流 J ...
- Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
Java IO流学习总结四:缓冲流-BufferedReader.BufferedWriter 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/det ...
- Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...
- Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论
Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...
- Java IO流学习总结七:Commons IO 2.5-FileUtils
Java IO流学习总结七:Commons IO 2.5-FileUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/5497 ...
- Java IO流学习总结六:ByteArrayInputStream、ByteArrayOutputStream
Java IO流学习总结六:ByteArrayInputStream.ByteArrayOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ar ...
- 201671010117 2016-2017-2 《Java程序设计》Java第二周学习心得
Java第二周学习心得 这一周老师在周四进行了课堂测验,完全出乎我的意料,我以为老师会在前两周上课讲一下,由于我在课前没有好好准备,反转课堂来的有的措手不及,那些题很多很多都不会,也错了很多,班上有很 ...
- java IO(一):File类
1.File类简介 File类位于java.io包中.它面向文件层次级别操作.查看文件,而字节流.字符流操作数据时显然比之更底层. 学习File类包括以下几个重点:文件路径.文件分隔符.创建文件(目录 ...
- java程序员学习路线以及我的学习经验
本文作者为优知学院创始人陈睿(mike),作者有10年以上技术&产品经验,曾任百度研发经理.携程定制旅游CTO. " 这是一篇完整的java程序员学习线路图,一共分为六个阶段. 我以 ...
最新文章
- 【数据结构】顺序表的应用(1)(C语言)
- python使用教程pandas-「Python」pandas入门教程
- 线程阻塞的概念 (Java 中的睡眠状态sleep 等待状态wait 礼让状态yield 自闭状态join suspend() 和 resume() )
- Python之父重回决策层,社区治理新方案!
- 卸载mysql 安装_MySQL萌新第一季 第二话
- Mercurial(Hg)基本操作
- 【渝粤教育】国家开放大学2018年秋季 2006T经济数学基础12 参考试题
- 排序算法 --- 堆排序
- JS中的Map和Set实现映射对象
- 树莓派 libcurl安装
- Zookeeper四字监控命令使用总结
- 自变量/解释变量/因变量/响应变量/协变量等变量相关概念探析
- django之admin调整页面展示
- “海潮效应”侵袭厨电市场,品牌突围时不我待
- 什么叫单模光纤_单模光纤和多模光纤有什么区别
- 全球及中国企业社交网络行业渠道营销分析及市场全面调研报告2021-2027年
- 干货分享|被PubMed收录的论文,在MEDLINE和SCIE能检索到吗?
- linux hba查看,各操作系统查看HBA和WWN的方法
- element ui input限制输入6位数字(短信验证码)
- 倍加福耦合器KFD2-BR-1.PA.1500
热门文章
- PAT 1017 Queueing at Bank[一般]
- Django基础之Form
- java数据类型和运算优先级
- 从hadoop-0.20.2升级到hadoop-1.0.3
- JPBC库只使用椭圆曲线群,不使用双线性性质。找单位元,逆元等
- 终于有人把正态分布和二八法则讲明白了
- 怎么调节手机的刷新率_二分钟科普:手机上的“高刷新率”
- 几年不联系的前女友,加我就为说这……
- 你这样的“垃圾“,就应该进入老年代!!!
- 为什么 0.1 + 0.2 = 0.300000004