提供一個開箱即用的 Java 目錄操作工具類,支援列出指定目錄下所有檔案/子目錄,以及將目錄移動至新位置(自動建立目標目錄)。代碼採用標準 java.io.File API,處理路徑邊界條件,適合作為檔案管理模組的基礎組件。
DirList(String pathName) 返回字串陣列,空路徑預設為當前目錄DirMove(String src, String dest) 移動整個目錄樹,目標不存在自動建立
import java.io.*;
public class Dir {
// 列出目錄內容
public String[] DirList(String pathName) {
try {
File path = pathName.equals("") ? new File(".") : new File(pathName);
if (!path.isDirectory()) return null;
return path.list();
} catch (Exception e) {
System.err.println(e);
return null;
}
}
// 移動目錄
public boolean DirMove(String src, String dest) {
try {
File srcDir = new File(src);
if (!srcDir.isDirectory()) return false;
File destDir = new File(dest);
if (!destDir.isDirectory()) destDir.mkdirs(); // 自動建立目標目錄
// renameTo 移動目錄(同檔案系統有效,跨檔案系統會失敗)
boolean success = srcDir.renameTo(new File(destDir, srcDir.getName()));
if (!success) System.out.println("Move failed!");
return success;
} catch (Exception e) {
System.out.println(e);
return false;
}
}
// 命令列測試入口
public static void main(String[] args) {
Dir d = new Dir();
if (args.length == 0) return;
String cmd = args[0];
if (cmd.equals("list") && args.length == 2) {
String[] files = d.DirList(args[1]);
if (files != null) for (String f : files) System.out.println(f);
} else if (cmd.equals("move") && args.length == 3) {
d.DirMove(args[1], args[2]);
}
}
}
| 場景 | 處理方式 |
|---|---|
| 路徑為空 | 預設 new File(".") 當前目錄 |
| 來源非目錄 | 直接返回 false/null |
| 目標目錄不存在 | mkdirs() 遞迴建立 |
| 跨檔案系統移動 | renameTo() 會失敗,建議改用「複製+刪除」策略 |
| 異常處理 | 捕獲並列印錯誤,返回失敗指示,不拋出受檢異常 |
// 列出目錄
String[] items = new Dir().DirList("/home/user/docs");
for (String item : items) System.out.println(item);
// 移動目錄
boolean ok = new Dir().DirMove("/tmp/source_dir", "/backup/target_dir");
System.out.println("Move " + (ok ? "success" : "failed"));
File.list(FilenameFilter))Files.walk() NIO.2 更簡潔)Files.move(REPLACE_EXISTING, ATOMIC_MOVE)