java.io.File

来源:互联网 发布:overturn软件 编辑:程序博客网 时间:2024/06/05 23:56

File(文件)既能代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。File类的实例是不可变的;也就是说,File对象表示的抽象路径名将不可改变。

利用目录过滤器获得一个受限文件列表,

import java.io.File;import java.io.FilenameFilter;//实现FilenameFilter接口public class Filenamefilter implements FilenameFilter{    String regex=null;    public Filenamefilter(String regex){        this.regex=regex;    }    //接口中的方法,用于选取满足要求的文件    //其中,file指的是 目标文件路径path ,name指的是文件名    public boolean accept(File file,String name){        return name.startsWith(regex);    }}class DirList{    public static void main(String[] args) {        //文件目录        File path=new File("D:\\工作笔记");        //list方法会为此目录对象下的每个文件名调用accept()方法,判断该文件是否包含在内        String[] strList=path.list(new Filenamefilter("规则"));        for(String dirItem:strList){            System.out.println(dirItem);        }    }}//结果规则有误分析1.png规则有误分析2.png

利用匿名内部类进行改进:

class FileInnerNameFilter{    public static void main(String[] args) {        File path=new File("D:\\工作笔记");        //匿名类要直接使用该变量,因此要定义为final        final String regex="规则";        String[] strList=path.list(new FilenameFilter() {            public boolean accept(File dir, String name) {                return name.startsWith(regex);            }        });        for(String dirItem:strList){            System.out.println(dirItem);        }    }}

产生给定目录下的整个目录树中所有的文件:

public class TreeInfo {    //分别保存文件和目录    List<File> files=new ArrayList<File>();    List<File> dirs=new ArrayList<File>();    public void addAll(TreeInfo other){        files.addAll(other.files);        dirs.addAll(other.dirs);    }    public static TreeInfo walk(String path,String regex){        return recurseDirs(new File(path),regex);    }    public static TreeInfo walk(File start,String regex){        return recurseDirs(start,regex);    }    //指定处的文件开始    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{                result.files.add(item);            }        }        return result;    }}

File类的一些常用方法:

public class FileTest {    public static void main(String[] args) {        //判断指定的文件是否存在,不存在就创建        //unix平台,分隔符是/        //windows平台,分隔符是\        String url="D:\\GoogleMaps\\Egypt"+ File.separator+"\\test";        File dir=new File(url);        if(!dir.exists()){            //这是创建目录,而不是文件            //创建此抽象路径指定的目录,包括所有必需但不存在的父目录          System.out.println("创建目录:"+dir.mkdirs());        }        File file=new File(dir+File.separator+"test.txt");        try {            //只会适用创建文件本身,不包括父文件的创建(如果父文件不存在,需要判断)            System.out.println("创建文件:"+file.createNewFile());        } catch (IOException e) {            e.printStackTrace();        }        System.out.println("文件是否可读:"+file.canRead());        System.out.println("文件是否可写:"+file.canWrite());        System.out.println("绝对路径名:"+file.getAbsolutePath());        System.out.println("文件名:"+file.getName());        System.out.println("父目录:"+file.getParent());        System.out.println("是否是目录:"+file.isDirectory());        System.out.println("是否是文件:"+file.isFile());        System.out.println("最近一次被修改的时间:"+file.lastModified());        System.out.println("文件的长度:"+file.length());        //原来的文件不见了        System.out.println("移动文件(相当于重新命名):"+file.renameTo(new File(dir+File.separator+"newTest.txt")));        System.out.println("路径名字符串:"+file.toString());        System.out.println("文件删除:"+file.delete());    }}//结果:创建目录:true创建文件:true文件是否可读:true文件是否可写:true绝对路径名:D:\GoogleMaps\Egypt\test\test.txt文件名:test.txt父目录:D:\GoogleMaps\Egypt\test是否是目录:false是否是文件:true最近一次被修改的时间:1499951806477文件的长度:0移动文件(相当于重新命名):true路径名字符串:D:\GoogleMaps\Egypt\test\test.txt//因为文件被重命名,所以删除失败文件删除:false
原创粉丝点击