《Java编程思想》学习笔记10——文件和目录常用操作

1.文件目录的List操作:

Java中,File类其实代表文件的路径,它既可以代表一个特定文件的文件,也可以代表一个包含多个文件的目录名称。如果File代表目录,可以使用List列出目录中文件。

import  java.util.regex.*;
import  java.io.*;
import  java.util.*;
public class DirList{
	public static void main(String[] args){
		//当前目录
		File path = new File(“.”);
		String[] list;
		//如果没有指定参数,则将目录中文件全部列出
		if(args.length == 0){
	list = path.list();
}
//指定了参数,则根据指定文件名过滤符合条件的文件
else{
	list = path.list(new DirFilter(args[0]));
}
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
for(String dirItem : list){
	System.out.println(dirItem);
}
}
}
class DirFilter implements FilenameFilter{
	private Pattern pattern;
	public DirFilter(String regex){
		//将输入的命令行参数编译为正则表达式的模式串
		pattern = Pattern.compile(regex);
}
//File的List方法回调方法
public boolean accept(File dir, String name){
	//使用正则表达式匹配给定目录下的文件名
	return pattern.matcher(name).matches();
} 
}

命令行输入参数:“*\.java”

输出结果如下:

DirFilter.java

DirList.java

2.java中除了File类可以表示文件的路径外,还可以表示目录的路径,可以通过File的isDirectory判断File对象是一个文件还是一个目录。

如下的例子通过local()方法列出给定目录中符合条件的文件/目录名称,walk()方法遍历给定的目录:

import java.util.regex.*;
import java.io.*;
import java.util.*;

public final class Directory{
	//列出目录中符合条件的文件名
	public static File[] local(File dir, final String regex){
		return dir.listFiles(new FilenameFilter(){
			private Pattern pattern = Pattern.compile(regex);
			public Boolean accept(File dir, String name){
				return pattern.matcher(new File(name).getName()).matches();
}
});
}
//重载列出目录下符合条件的文件名方法
public static File[] local(String path, final String regex){
	return local(new File(path), regex);
} 
//代表文件树信息的静态内部类
public static class TreeInfo implements Iterable{
	public List files = new ArrayList();
	public List dirs = new ArrayList();
	//默认的迭代器方法,跌倒文件树元素对象
	public Iterator iterator(){
		return files.iterator();
} 
void addAll(TreeInfo other){
	files.addAll(other.files);
	dirs.addAll(other.dirs);
}
public String toString(){
	return “dirs: ” + dirs + “\n\nfiles: ” + files;
}
}
//从指定的文件/目录开始遍历符合条件的文件
public static TreeInfo walk(String start, String regex){
	return recurseDirs(new File(start), regex);
}
//重载遍历文件/目录方法
\public static TreeInfo walk(File start, String regex){
	return recurseDirs(start, regex);
}
//默认的指定文件/目录查找任何文件名的文件
public static TreeInfo walk(File start){
	return recurseDirs(start, “.*”);
}
//重载默认的查找任何文件的方法
public static TreeInfo walk(String start){
	return recurseDirs(new File(start), “.*”);
} 
//从指定的文件/目录开始遍历,查找符合条件的文件名
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{
	if(item.getName().matches(regex)){
		result.files.add(item);
}
}
}
return result;
}
}

3.文件和目录的其他操作:

文件和目录除了常规的查找和遍历操作意外,还有很多其他的操作,例如:创建、删除、判断文件/目录是否已存在,获取文件/目录的绝对路径,获取文件/目录的权限等等,下面的小例子就展示文件/目录的这些操作:

import java.io.*;
public class MakeDirectories{
	//获取文件/目录的基本信息
private static void fileData(File f){
		System.out.println(
	“Absolute path: ” + f.getAbsolutePath() +
	“\n Can read: ” + f.canRead() +
	“\n Can write: ” + f.canWrite() +
	“\n getName: ” + f.getName() + 
	“\n getParent: ” + f.getParent() +
	“\n getPath: ” + f.getPath() +
	“\n length: ” + f.length() +
	“\n lastModified: ” + f.lastModifed());
if(f.isFile()){
	System.out.println(f.getName() + “ is a file”);
}
else if(f.isDirectory()){
System.out.println(f.getName() + “ is a directory”);
}
}
public static void main(String[] args){
	File old = new File(“oldFile”);
	File new = new File(“newFile”);
	old.renameTo(new);
	fileData(old);
	fileData(new);
	File d = new File(“/test”);
	if(d.exists()){
	System.out.println(“Deleting …” + d);
	d.delete();
}
else {
	System.out.prinln(“Creating…” + d);
	d.mkdirs();
}
}
}


你可能感兴趣的:(java技术,Thinking,in,java)