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);
}
@Override
public 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() { @Override
public 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);
@Override
public 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);
} @Override
public Iterator<File> iterator() {
return files.iterator();
}
@Override
public 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虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论
Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...
- Java基础知识学习(九)
GUI开发 先前用Java编写GUI程序,是使用抽象窗口工具包AWT(Abstract Window Toolkit).现在多用Swing.Swing可以看作是AWT的改良版,而不是代替AWT,是对A ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
- Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...
- Java IO流学习总结(1)
Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本 ...
- java IO(一):File类
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- 第65节:Java后端的学习之Spring基础
Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api) ...
- Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
在上一篇文章中Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream介绍了缓冲流中的字节流,而这一篇着重介绍缓冲流中字符流Buffered ...
随机推荐
- java8,方法引用
1:方法引用,https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html 当我们使用lambda表达式去创建一个 ...
- [vue]vue-cli下载原理
正常vue-cli这样操作就ok了 vue-cli github $ npm install -g vue-cli $ vue init webpack my-project $ cd my-proj ...
- Variational Approximate Inference
图模型(Graphical Models)是一个用来表示概率模型的工具.所谓概率模型,也就是在刻画一组随机变量之间的相互关系.图模型就是用来显式地刻画这些变量之间关系的.在 图模型中,每个变量由图中的 ...
- iOS开发--UILabel根据内容自动调整高度
写法一:对象方法,传入:字体/最大尺寸. 即可得到宽高, 最大尺寸主要限制宽度,如果是一行就给个{MAXFLOAT,MAXFLOAT};如果是多行就限制X值,Y值随便给 - (CGSize)sizeW ...
- Struts2-综合项目
综合项目:视频后台管理系统 开发环境:Tomcat6(服务器)+jdk6(windows操作系统) 使用技术:struts2(后台)+jsp(前台显示)+ajax(信息传递)+json(服务器响应前台 ...
- SV中的Interface和Program
Interface:SV中新定义的接口方式,用来简化接口连接,使用时注意在module或program之外定义interface,然后通过'include来添加进工程. interface arb_ ...
- 网络流-最大流 Dinic模板
#include <bits/stdc++.h> using namespace std; #define MP make_pair #define PB push_back #defin ...
- Linux基础命令---dump
dump 检查ext2/3/4文件系统,确定哪些文件需要备份,这些需要备份的文件将会被复制到指定的磁盘或者其他存储介质.dump检查Ext 2/3/4文件系统上的文件,并确定哪些文件需要备份.这些文件 ...
- nodepad++ 标签栏无法拖放标签
nodepad++ 标签栏无法拖放标签设置--首选项--常用--标签栏--锁定(不允许拖放) 去掉这个勾 ps:最近版本的不知道为什么这个设置不生效了,没找到原因,可能是bug,只能等待升级解决了(升 ...
- php new stdClass array 实例代码
php new stdClass array 实例代码 $searchResults = array ();// //$obj = array ("rs"=>array(), ...