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