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的更多相关文章

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

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

  2. Java基础知识学习(九)

    GUI开发 先前用Java编写GUI程序,是使用抽象窗口工具包AWT(Abstract Window Toolkit).现在多用Swing.Swing可以看作是AWT的改良版,而不是代替AWT,是对A ...

  3. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  4. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

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

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

  6. Java IO流学习总结(1)

    Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本 ...

  7. java IO(一):File类

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  8. 第65节:Java后端的学习之Spring基础

    Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api) ...

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

    在上一篇文章中Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream介绍了缓冲流中的字节流,而这一篇着重介绍缓冲流中字符流Buffered ...

随机推荐

  1. uvloop —— 超级快的 Python 异步网络框架

    简短介绍 asyncio是遵循Python标准库的一个异步 I/O框架.在这篇文章里,我将介绍 uvloop: 可以完整替代asyncio事件循环.uvloop是用Cython写的,基于 libuv. ...

  2. AngularJS 事件广播与接收 $emit $broadcast $on

    AngularJS中的作用域scope有一个非常有层次和嵌套分明的结构. 其中它们都有一个主要的$rootScope(也就说对应的Angular应用或者ng-app),然后其他所有的作用域部分都是继承 ...

  3. 树莓派3B新版raspbian系统换国内源

    树莓派新版系统更换了专门优化过的桌面环境PIXEL,正好手头有个闲置的TF卡决定刷上新版系统玩玩.下载刷系统过程很多教程页很简单.插卡,上电开机,释放卡上的剩余空间都很正常,因为树莓派官方源访问很慢下 ...

  4. IIS注册WEB服务扩展

    .net framework和iis那个先装的?如果先装IIS,然后再装.net的话,没有问题.但是如果顺序反了的话,需要在命令行里面执行 C:\Windows\Microsoft.NET\Frame ...

  5. ActiveMQ 集群负载平衡

    目前的架构: 负载均衡方案:========================================= 第二种方案呢,假设我们整个应用是个食堂,这个食堂里面有好多饭口,每个饭口有好多大爷大妈( ...

  6. Windows批处理程序bat

    @echo off    关闭回显,否则脚本中的命令都会输出,关闭后只显示结果. setlocal ENABLEDELAYEDEXPANSION 在for循环中变量扩展时需要用到 copy /Y ms ...

  7. Storm集成Siddhi

    <Siddhi初探>中我们介绍了Siddhi的基本使用方法,并表示我们将把Siddhi集成到Storm中作为流任务处理引擎.本文将用<Storm初探>中的例子讲解如何集成Sid ...

  8. python 多进程并发接口测试实例

    #encoding=utf-8 import requests import json import os import hashlib print "register------" ...

  9. JSF Web框架与Facelets表现层技术

    JSF(JavaServer Faces) JSF应用程序的生命周期从客户端对页面发出HTTP请求时开始,并在服务器响应页面时结束.JSF生命周期分为运行阶段和渲染阶段两个主要阶段. 执行阶段 当第一 ...

  10. Js基础知识1-数组操作全解

    数组操作全解 js变量类型 var string; var name = "student",age=12; //underfined.null.boolean.string.nu ...