Java File
2016-04-22 23:35
183 查看
I. 总括
简介
根据Java JDK 的官方定义,File 类是文件的抽象表达和文件夹的路径(an abstract representation of file and directory pathnames).特点
File 类对象本身只是用于代表某个文件或者文件夹,能够返回其一些属性,但是本身不参与I/O 操作(不能直接使用File 类对象进行读写).同时,用于路径表达的字符串也是取决于系统的:在Unix 中,为”/”;Windows 中,为”:” 和”\”.
II. 使用
注:例子皆以OS X 平台为操作系统创建
File file = new File("/Users/"); // 实例化File 对象,指向路径为/Users/
此处file 对象为一个文件夹,因为路径为/Users/
所以在调用系统方法
isDirectory()时会返回true
System.out.println(file.isDirectory()); // true
属性查询
除了isDirectory()方法外,File 还有其他方法来查看路径所指向文件(文件夹)的属性.
System.out.println(file.getAbsolutePath()); // /Users/ System.out.println(file.exists()); // true System.out.println(file.lastModified()); //21:21:42 GMT, April 21, 2016
文件夹下文件查询
因为此处file 是一个Directory,所以可以通过方法list()获得指向路径下的各个文件(文件夹).
File file = new File("/Users/Desktop/"); String [] files = file.list(); for(int i=0; i < files.length; i++) System.out.println(files[i]); output:// .DS_Store .localized 500 Days of Summer.mkv Android Studio.app Courses effectice java Files Mills Modern Business Penmanship.pdf Paragraph Claim.tiff programs Punctuation 3.tiff Redesigned SAT The Big Bang Theory
此处,
list()方法返回了/Users/Desktop/ 文件夹路径下的所有文件,并以String 的形式呈现.
而
list()方法能够传入参数,达到筛选所需要的文件名的目的;而这里传入的参数,是FilenameFilter interface.
此处在输出时使用了Lambda Expression.
class FileDemo { public static FilenameFilter filter(final String regex) { return 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 void main(String [] args) { File file = new File("/Users/Desktop/"); String[] files = file.list(filter(".*")); Arrays.stream(files).forEach(s -> System.out.println(s)); } } output:// .DS_Store .localized 500 Days of Summer.mkv Android Studio.app Courses effectice java Files Mills Modern Business Penmanship.pdf Paragraph Claim.tiff programs Punctuation 3.tiff Redesigned SAT The Big Bang Theory
类似的方法
listFiles()原理相同,但返回的是File 数组。
III. 文件树
利用list()方法,能够查遍指定目录下的所有文件。
public class Directory { public static File[] local(File dir, final String regex) { return dir.listFiles(new FilenameFilter() { private 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(File dir) { return local(dir, "\n"); } // TODO a two-tuple for returning a pair of objects public static class TreeInfo implements Iterable<File> { public List<File> files = new ArrayList<>(); public List<File> dirs = new ArrayList<>(); @Override public Iterator<File> iterator() { return files.iterator(); } void addAll(TreeInfo other) { files.addAll(other.files); dirs.addAll(other.dirs); } @Override public String toString() { return "dirs " + PPrint.pformat(dirs) + "\n\nfiles " + PPrint.pformat(files); } } public static TreeInfo walk(File file) { return recurseDirs(file, ".*"); } public static TreeInfo walk(File file, String regex) { return recurseDirs(file, regex); } public static TreeInfo walk(String filePath, String regex) { return recurseDirs(new File(filePath), regex); } public static TreeInfo walk(String filePath) { return recurseDirs(new File(filePath), ".*"); } // TODO 搜寻遍指定文件下的文件树 private static TreeInfo recurseDirs(File startDir, String regex) { TreeInfo result = new TreeInfo(); for (File item: startDir.listFiles()) { if (item.isDirectory()) { // Directory result.dirs.add(item); result.addAll(recurseDirs(item, regex)); } else // File if (item.getName().matches(regex)) result.files.add(item); } return result; } }
相关文章推荐
- 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
- 《struts2接受输入参数的三种方式》
- Java并发之线程间的通信Condition
- (JAVA)从零开始之--打印流PrintStream记录日志文件
- 初涉Java反射机制
- 谈谈自己对java的学习看法
- java笔记--笔试中极容易出错的表达式的陷阱
- 链表插入、链表相加、链表相乘、链表排序、链表合并等操作的java实现
- c#与Java跨语言socket传输float
- Java位移运算符
- 简单理解==和equals
- Java笔记--CenOS6.5搭建hadoop2.7.1伪分布式环境
- (2.2.7.3)MyEclipse + Maven开发Web工程的详细配置过程
- 2016-04-22jdbc-mysql-java
- java日志之log4j简单使用
- java线程安全
- Jmap 和MAT结合分析JAVA 内存问题
- Java基础5——设计模式
- java日志之slf4j与logback简单使用
- java中equals和==区别小结