Terry.Li-彬

虚其心,可解天下之问;专其心,可治天下之学;静其心,可悟天下之理;恒其心,可成天下之业。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  143 随笔 :: 344 文章 :: 130 评论 :: 0 Trackbacks
1.         class File对象描述了所指定路径下的文件和目录的信息。通过File对象,可以查看某个路径下的文件和目录信息,并可操作路径下的文件和目录。
2.         class File的应用
2.1          查看(查询)某个路径下的文件信息。
2.1.1          class File的构造函数
class File有两类构造函数,一类带有一个参数,用于产生一个描述参数所所指向的路径下的文件系统的对象;另一类带有两数,第一个参数表示路径,第二个参数 表示子目录,用来产生描述第一个参数所指向的路径下的某个子目录的文件信息,子目录名称由第二个参数指定。如:
File path = new File(“c:""”);产生一个描述c:"下的文件信息的对象
File path = new File(“c:""”, “test”);产生一个描述c:"的test子目录的文件信息的对象。
2.1.2          list()和list(FilenameFilter filter)函数
1)        list()函数以String数组的形式返回一个File对象所描述的文件信息。返回的是路径下的所有文件和目录的文件名和目录名。
2)        list(FilenameFilter filter)函数则提供了查询功能,通过它可能查询出满足特定条件的文件名和目录名。
2.1.3          用FinenameFilter接口进行文件或目录的查询
2.1.3.1.   这个接口只包含一个函数:boolean accept(File dir, String name),第二个参数代表一个文件或目录的名称,第一个参数代表文件或目录所在的目录的名称。当返回true,表示文件满足查询条件,要被放入结果中; 否则,表示文件不满足要求。
2.1.3.2.  工作原理
当调用某个File对象的list(FilenameFilter filter)函数时, 会对File对象中的每一个文件或目录调用参数filter中的accept()方法。在对一个文件或目录调用accept()函数时把它的名称以及一个 描述它所在的目录的File对象作为参数传给accept()函数。
2.1.4          一个简单的实例
import java.io.File;
import java.io.FilenameFilter;
class DirList{
    public void printFile(String dir, String filter){
        File path = new File(dir);
        String[] fileList;
        if(filter.length()==0){
            System.out.println(""nAll file:");
            fileList = path.list(); //取得所有文件信息
       }
        else{
System.out.println(""nAll file including " + filter);
//取得满足查询条件的文件信息
            fileList = path.list(new DirFilter(filter));
        }
        for(int i=0; i<fileList.length; i++)
            System.out.println(fileList[i]);
    }
    public void printFile(String dir){
        printFile(dir, "");
    }
}
class DirFilter implements FilenameFilter{
    String afn; //存放查询条件
DirFilter(String afn) { this.afn = afn; }
//满足查询条件,返回true
    public boolean accept(File dir, String name){
        return name.indexOf(afn)!=-1;
    }
}
public class TestIO{
    public static void main(String[] args){
        DirList dirList = new DirList();
              //显示F:"test下的文件信息
        dirList.printFile("F:""test");
              //显示F:"test下名称包含“.rar”文件信息
        dirList.printFile("F:""test", ".rar");
        //显示F:"test下名称包含“r”文件信息
dirList.printFile("F:""test", "r");
    }
}
这个只是一个简单的例子,只要完善accept()函数,你也可以做出一个Java版的dir命令来。
2.2          当然,我们还能通过File来文件或目录进行创建、删除和改名的操作。
import java.io.File;
import java.io.FilenameFilter;
import java.util.Date;
import java.text.SimpleDateFormat;
class DirFilter implements FilenameFilter{
    String afn;
    DirFilter(String afn) { this.afn = afn; }
    public boolean accept(File dir, String name){
        return name.indexOf(afn)!=-1;
    }
}
class OptFile{
    public static String getAbsolutePath(File f){
        return f.getAbsolutePath();
    }
    public static String getPath(File f){
        return f.getParent();
    }
    public static String getName(File f){
        return f.getName();
    }
    public static long getLength(File f){
        return f.length();
    }
    public static String getParent(File f){
       return f.getParent();
    }
    public static String getLastModified(File f, String format){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        if(format.equals("ymdh"))
            sdf = new SimpleDateFormat("yyyy-MM-dd hh");
        else if(format.equals("ymdhm"))
            sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm");
        return sdf.format((new Date(f.lastModified())));
    }
    public static String getLastModified(File f){
        return getLastModified(f, "ymd");
    }
    public static boolean canRead(File f){
        return f.canRead();
    }
    public static boolean canWrite(File f){
        return f.canWrite();
    }
    public static boolean isFile(File f){
        return f.isFile();
    }
    public static boolean isDir(File f){
        return f.isDirectory();
    }
    public static boolean rename(File oldName, File newName){
        return oldName.renameTo(newName);
    }
    public static boolean delete(File f){
        return f.delete();
    }
    public static boolean mkdir(File f){
        return f.mkdirs();
    }
    /**
     * 从指定路径中查询文件
     */
    public static File[] findFile(String filePath, String fileName){
        File f = new File(filePath);
        File[] result = f.listFiles(new DirFilter(fileName));
        return result;
    }
    public static void printFileAtt(File f){       
        System.out.println(
            " Absolute path: " + getAbsolutePath(f) +
            ""n Can read: " + canRead(f) +
            ""n Can write: " + canWrite(f) + 
            ""n path: " + getPath(f) +
            ""n name: " + getName(f) +
            ""n parent: " + getParent(f) +
            ""n length: " + getLength(f) +
            ""n lastModified: " + getLastModified(f));
        if(isFile(f))
            System.out.println(" it's a file");
        else if(isDir(f))
            System.out.println(" it's a directory");
    }
}
public class TestIO{
    public static void main(String[] args){
        File f1 = new File("F:""nepalon""thinkinginjava""test");
        File f2 = new File("F:""nepalon""thinkinginjava""test""aa ");
        OptFile.printFileAtt(f1);
        OptFile.printFileAtt(f2);
        //当对文件或目录进行改名,且更新到一个不同的下时,
        //会先把文件或整个目录剪切到新目录下,再重新命名
        File nf2 = new File("F:""nepalon""thinkinginjava""使用log4j.files");
        if(OptFile.rename(f2, nf2)){
            System.out.println("after rename f2:");
            OptFile.printFileAtt(nf2);
        }
        else
            System.out.println("rename nf2 failly");
      //进行删除操作时,只能删除文件;如果删除的是目录,会返回false
        File df = new File("F:""nepalon""thinkinginjava""test""1001.doc");
        if(OptFile.delete(df))
            System.out.println("Delete df successfully");
        else
            System.out.println("Delete df failly");
        System.out.println("Find file with name ""1001""");
        OptFile.findFile("F:""nepalon""thinkinginjava""test", "1001");
        File mf = new File("F:""nepalon""thinkinginjava""test""1001");
        if(OptFile.mkdir(mf))
            System.out.println("create directory mf successfully");
        else
            System.out.println("create directory mf failly");
    }
}
posted on 2008-02-13 23:08 礼物 阅读(304) 评论(0)  编辑  收藏 所属分类: Java