《Java程式設計思想》學習筆記10——檔案和目錄常用操作
阿新 • • 發佈:2019-02-18
1.檔案目錄的List操作:
Java中,File類其實代表檔案的路徑,它既可以代表一個特定檔案的檔案,也可以代表一個包含多個檔案的目錄名稱。如果File代表目錄,可以使用List列出目錄中檔案。
- import java.util.regex.*;
- import java.io.*;
- import java.util.*;
- publicclass DirList{
- publicstaticvoid main(String[] args){
- //當前目錄
- File path = new File(“.”);
-
String[] list;
- //如果沒有指定引數,則將目錄中檔案全部列出
- if(args.length == 0){
- list = path.list();
- }
- //指定了引數,則根據指定檔名過濾符合條件的檔案
- else{
- list = path.list(new DirFilter(args[0]));
- }
- Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
- for(String dirItem : list){
- System.out.println(dirItem);
- }
- }
-
}
- class DirFilter implements FilenameFilter{
- private Pattern pattern;
- public DirFilter(String regex){
- //將輸入的命令列引數編譯為正則表示式的模式串
- pattern = Pattern.compile(regex);
- }
- //File的List方法回撥方法
- publicboolean accept(File dir, String name){
- //使用正則表示式匹配給定目錄下的檔名
-
return pattern.matcher(name).matches();
- }
- }
命令列輸入引數:“*\.java”
輸出結果如下:
DirFilter.java
DirList.java
2.java中除了File類可以表示檔案的路徑外,還可以表示目錄的路徑,可以通過File的isDirectory判斷File物件是一個檔案還是一個目錄。
如下的例子通過local()方法列出給定目錄中符合條件的檔案/目錄名稱,walk()方法遍歷給定的目錄:
- import java.util.regex.*;
- import java.io.*;
- import java.util.*;
- publicfinalclass Directory{
- //列出目錄中符合條件的檔名
- publicstatic 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(new File(name).getName()).matches();
- }
- });
- }
- //過載列出目錄下符合條件的檔名方法
- publicstatic File[] local(String path, final String regex){
- return local(new File(path), regex);
- }
- //代表檔案樹資訊的靜態內部類
- publicstaticclass 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 other){
- files.addAll(other.files);
- dirs.addAll(other.dirs);
- }
- public String toString(){
- return “dirs: ” + dirs + “\n\nfiles: ” + files;
- }
- }
- //從指定的檔案/目錄開始遍歷符合條件的檔案
- publicstatic TreeInfo walk(String start, String regex){
- return recurseDirs(new File(start), regex);
- }
- //過載遍歷檔案/目錄方法
- \publicstatic TreeInfo walk(File start, String regex){
- return recurseDirs(start, regex);
- }
- //預設的指定檔案/目錄查詢任何檔名的檔案
- publicstatic TreeInfo walk(File start){
- return recurseDirs(start, “.*”);
- }
- //過載預設的查詢任何檔案的方法
- publicstatic TreeInfo walk(String start){
- return recurseDirs(new File(start), “.*”);
- }
- //從指定的檔案/目錄開始遍歷,查詢符合條件的檔名
- 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{
- if(item.getName().matches(regex)){
- result.files.add(item);
- }
- }
- }
- return result;
- }
- }
3.檔案和目錄的其他操作:
檔案和目錄除了常規的查詢和遍歷操作意外,還有很多其他的操作,例如:建立、刪除、判斷檔案/目錄是否已存在,獲取檔案/目錄的絕對路徑,獲取檔案/目錄的許可權等等,下面的小例子就展示檔案/目錄的這些操作:
- import java.io.*;
- publicclass MakeDirectories{
- //獲取檔案/目錄的基本資訊
- privatestaticvoid fileData(File f){
- System.out.println(
- “Absolute path: ” + f.getAbsolutePath() +
- “\n Can read: ” + f.canRead() +
- “\n Can write: ” + f.canWrite() +
- “\n getName: ” + f.getName() +
- “\n getParent: ” + f.getParent() +
- “\n getPath: ” + f.getPath() +
- “\n length: ” + f.length() +
- “\n lastModified: ” + f.lastModifed());
- if(f.isFile()){
- System.out.println(f.getName() + “ is a file”);
- }
- elseif(f.isDirectory()){
- System.out.println(f.getName() + “ is a directory”);
- }
- }
- publicstaticvoid main(String[] args){
- File old = new File(“oldFile”);
- File new = new File(“newFile”);
- old.renameTo(new);
- fileData(old);
- fileData(new);
- File d = new File(“/test”);
- if(d.exists()){
- System.out.println(“Deleting …” + d);
- d.delete();
- }
- else {
- System.out.prinln(“Creating…” + d);
- d.mkdirs();
- }
- }
- }