您的位置:首页 > 编程语言 > Java开发

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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: