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