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 ...
随机推荐
- PAT A+B for Polynomials[简单]
1002 A+B for Polynomials (25)(25 分) This time, you are supposed to find A+B where A and B are two po ...
- How to enable TLS 1.2 on Windows Server 2008 R2
Problem How to enable TLS 1.2 on Windows Server 2008 R2? Resolution QuoVadis recommends enabling and ...
- js数组中indesOf方法的使用
<html> <head> <title>数组的操作</title> <script type="text/javascript&quo ...
- 如何提取app软件的apk格式中的字体?
1.下载apk格式的指定app软件: 2.将apk格式的文件名更改为后缀名为zip格式: 3.用winrar解压软件解压,然后就找到其中的ttf格式的字体文件. 举例说明,我想找到airbnb的app ...
- Unirest-拼装http请求发送rest接口
public static Integer getInfo(String name) { HttpResponse<Integer> httpResponse = null; try { ...
- webstorm的个性化设置settings
如何更改主题(字体&配色):File -> settings -> Editor -> colors&fonts -> scheme name.主题下载地址 如 ...
- jQuery常用操作
jQuery jQuery是一个轻量级的JS库,是一个被封装好的JS文件,提供了更为简便的元素操作方式,jQuery封装了DOM. 使用jQuery 引入jQuery文件 <scrtipt sr ...
- Linux服务器配置---安装centos
安装centos 1.插入光盘,启动,可以选择第一项进行安装 2.根据实际需求,一般会选择skip 3.选择语言“简体中文” 4.选择第一项 5.设置主机名字,使用默认 6.选择时区 7.设置超级用户 ...
- Qt 学习之路 2(55):数据库操作
Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作.这里我们所说的“平台独立”,既包括操作系统平台,又包括各个数据库平台.另外,我们强调了“基于 SQL”,因为 NoSQL 数据 ...
- python中hasattr, getattr,setattr及delattr四个方法
通过一个实例来说明,这四个函数的用法: 首先一个如下的一个简单的类: class Animal(object): def __init__(self,name, zone): self.name = ...