Java File类及其应用


File类

1、文件类File是用来获取文件的属性以及删除、重命名文件的
2、构建一个File实例时,不会再机器上创建一个文件,File实例是不可改变的,即File表示的抽象路径名将永远不变;
3、绝对文件名:由文件名和他的完整路径,以及驱动字母组成的,如c:\book\Welcome.java,
其中 c:\book为目录路径
4、windows中目录的分隔符是 \,但在java中应该写成 \\ ,或者 / ;
5、在程序中,不要直接使用绝对文件名,(因为平台拓展性低)应该使用与当前目录相关的文件名;

6、File类的一些基本行为:
File不仅仅只代表存在的文件或目录,也可以用来创建不存在的整个目录路径,也可以用来查看文件的特性(大小,最后修改日期,读写等),检查某个File对象代表的是一个目录还是文件;
java.lo.File
 
+File (pathname:String)
+File (parent :String , child:String)

+File (parent : File , child :String)

+exists() : boolean
+canRead () : boolean
+canWrite () : boolean

+isDirectory () :boolean
+isFile () : boolean
+isAbsolute () : boolean
+isHidden () ; boolean

+getAbsolutePath () :String
+getCanonicalPath () :String

+getName () :String
+getPath () :String
+getParent () :String

+lastModified () :long
+length () : long
+listFiles ( ) :File[ ]
+delete () :boolean
+renameTo (dest: File): boolean

+createNewFile();boolean
○以特定路径名创建一个File对象(路径名可以是目录、文件)
○为目录parent下的child创建一个File对象,
(child可以是目录、文件);
○为File对象的parent下的child创建一个File对象;

○如果File对象存在,返回True;
○如果File对象存在且可读,返回True;
○如果File对象存在且可写,返回True;

○如果File对象表示一个目录,返回True;
○如果File对象表示一个文件,返回True;
○如果File对象是用一个绝对路径创建的,返回True;
○如果File对象被隐藏,返回True;

○返回File对象表示的完整绝对文件名、路径名
○同上,不过删除冗余名和将驱动器好转换成大写字母;

○返回File完整路径名或文件名的最后一个名字
○返回File表示的完整路径名和文件名
○返回File对象的完整父目录

○返回文件的最后一次修改时间
○返回文件大小
○返回一个File对象目录下的文件
删除这个文件,如果成功返回true;
重命名这个文件,如果成功返回true;

○创建新文件


File类的一些应用

1、目录列表器

/**
* @see DirFilter.java
* @author Al_assad yulinying_1994@outlook.com
* @date 2016年9月30日 上午9:07:58
* @version V1.0
* Description: 文件目录列表器
*                         1、列举处理一个目录下的所有文件和目录;
*                         2、拥有过滤功能;
*                         3、对列举对象字母字自动排序;
*/

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

public class DirList {
       private String pathname; /**记录路径名*/
       private String[] list;                       /**记录文件列表*/
       private String regex;           /**记录文件名过滤用的正则表达式*/
       public DirList() throws FileNotFoundException{
             this(".");
       }
       public DirList(String pathanme)throws FileNotFoundException{
             this(".",".*");
       }
       public DirList(String pathname,String regex) throws FileNotFoundException{
             this.pathname = pathname;
             File path = new File(pathname);
             if(!path.exists())
                    throw new FileNotFoundException();

             if(regex.equals(".*"))
                    list = path.list();       //直接列举文件目录
             else
                    list = path.list(new DirFilter(regex));       //使用指定的FilenameFilter筛选列举目录;
             /*该部分可以使用匿名内部类重写
              * list = path.list(new FilenameFilter(){
              *           private Pattern pattern = Pattern.compile(regex);
              *           public boolean accept(File dir,String name){
              *                  return pattern.matcher(name).matches();
              *           }
              * )*/

             //对list按字母顺序进行排序;
             Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
       }
       /**在控制台上打印list*/
       public void print(){
             for(String dirItem : list)
                    System.out.println(dirItem);
       }
       /**返回list结果*/
       public String[] getList(){
             return this.list;
       }

}


/**
* @see FilenameFilter
* @author Al_assad yulinying_1994@outlook.com
* @date 2016年9月30日 上午9:45:34
* @version V1.0
* Description: 文件目录筛选器
*      接口FilenameFilter的内容:
*      public interface FilenameFilter{
*            boolean accpet(File dir,String name);  //原始目录文件dir,和待筛选的文件名name;
*      }
*
*/
import java.io.*;
import java.util.regex.*;

public class DirFilter implements FilenameFilter{
       private Pattern pattern;
       public DirFilter(String regex){
             pattern = Pattern.compile(regex);
       }
       public boolean accept(File dir,String name){
             return pattern.matcher(name).matches();
       }
       /* Pattern p = Pattern.compile(regexString);
        * Matcher m = p.matcher(targetString);
        * boolean result = m.matches();
        * */
}



2、目录使用工具
/**
* @see
* @author Al_assad yulinying_1994@outlook.com
* @date 2016年9月30日 上午10:15:55
* @version V1.0
* Description: 目录实用工具
*                         1、local产生本地目录中的文件集;
*                         2、walk产生给定目录下的整个目录树的所有文件集;
*                         3、提供文件名筛选功能;
*/

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

public class Directory {

       /**local产生本地目录中的文件集,以File数组的形式返回*/
       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(name).matches();
                    }
             });
       }
       public static File[] local(String path,final String regex){
             return local(new File(path),regex);
       }

       /**walk产生给定目录下的整个目录树的所有文件集,结果以TreeInfo的形式返回(使用递归的方式进行访问)*/
       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),".*");
       }

       private static TreeInfo recurseDirs(File start,String regex){
             TreeInfo result = new TreeInfo();
             for(File item : start.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;
       }

       //定义内部类TreeInfo文件树信息类
       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 tree){
                    this.files.addAll(tree.files);
                    this.dirs.addAll(tree.dirs);
             }
             public String toString(){
                    return "files:"+getListStr(files)+"\ndirs:"+getListStr(dirs);
             }
             private String getListStr(List<File> list){
                    String str ="[\n";
                    for(File element : list)
                          str += (element.getName() +"\n");
                    str += "]";
                    return str;
             }
       }

}






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值