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

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

2016-01-04 09:46 543 查看
1.文件目录的List操作:

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

[java] view
plaincopy

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()方法遍历给定的目录:

[java] view
plaincopy

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<File>{

public List<File> files = new ArrayList<File>();

public List<File> dirs = new ArrayList<File>();

//默认的迭代器方法,跌倒文件树元素对象

public Iterator<File> 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.文件和目录的其他操作:

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

[java] view
plaincopy

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();

}

}

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