java.io.File 類代表文件/目錄路徑(不保證存在),是文件系統的抽象視圖。本文覆蓋創建/刪除/重命名、目錄操作、屬性讀取/設置、遞歸遍歷、文本讀寫、管道線程通信六大實戰場景。
// 創建文件(跨平台用 File.separator)
File file = new File("D:" + File.separator + "IO" + File.separator + "test.txt");
if (!file.exists()) {
file.createNewFile(); // 返回 boolean
}
// 刪除
if (file.exists()) file.delete();
// 重命名
File src = new File("src/test.txt");
File dest = new File("src/test2.txt");
src.renameTo(dest); // 同目錄下即重命名,跨目錄即移動
// 單級目錄
File dir = new File("D:/data/dir1");
dir.mkdir(); // 父目錄必須存在
// 多級目錄
File multi = new File("D:/data/dir1/sub1/sub2");
multi.mkdirs(); // 自動創建父目錄
// 刪除非空目錄(遞歸)
public static void deleteDir(File dir) {
File[] files = dir.listFiles();
if (files != null) {
for (File f : files) {
if (f.isDirectory()) deleteDir(f);
f.delete();
}
}
dir.delete();
}
File f = new File("test.txt");
System.out.println("存在: " + f.exists());
System.out.println("名稱: " + f.getName());
System.out.println("路徑: " + f.getPath());
System.out.println("絕對路徑: " + f.getAbsolutePath());
System.out.println("父目錄: " + f.getParent());
System.out.println("大小: " + f.length() / 1024.0 + " KB");
System.out.println("隱藏: " + f.isHidden());
System.out.println("可讀: " + f.canRead());
System.out.println("可寫: " + f.canWrite());
System.out.println("是目錄: " + f.isDirectory());
// 設置屬性
f.setReadable(true);
f.setWritable(true);
f.setReadOnly(); // 僅讀,不可逆(需文件系統支持)
public static void printTree(File dir, int level) {
if (dir == null || !dir.exists()) return;
for (int i = 0; i < level; i++) System.out.print("| ");
System.out.println("|-- " + dir.getName());
if (dir.isDirectory()) {
File[] children = dir.listFiles();
if (children != null) {
for (File child : children) printTree(child, level + 1);
}
}
}
// 調用:printTree(new File("."), 0);
// 讀取
try (BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream("tangshi.txt"), StandardCharsets.UTF_8))) {
String line;
while ((line = br.readLine()) != null) System.out.println(line);
}
// 寫入
try (BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream("tangshi2.txt"), StandardCharsets.UTF_8))) {
bw.write("登鸛雀樓\n");
bw.write("唐 王之渙\n");
bw.write("白日依山盡,黃河入海流。\n");
}
class Writer extends Thread {
private final PipedOutputStream out = new PipedOutputStream();
public PipedOutputStream getOut() { return out; }
@Override public void run() {
try { out.write("Hello from Writer".getBytes()); out.close(); }
catch (IOException e) { e.printStackTrace(); }
}
}
class Reader extends Thread {
private final PipedInputStream in = new PipedInputStream();
public PipedInputStream getIn() { return in; }
@Override public void run() {
try (BufferedReader br = new BufferedReader(new InputStreamReader(in))) {
String line;
while ((line = br.readLine()) != null) System.out.println("Reader got: " + line);
} catch (IOException e) { e.printStackTrace(); }
}
}
// 主程序
Writer w = new Writer(); Reader r = new Reader();
w.getOut().connect(r.getIn()); // 綁定
w.start(); r.start();
Files (NIO.2):Files.copy()、Files.walk()、Files.readAllLines() 更現代、鏈式調用FileUtils (Apache Commons IO):copyDirectory()、deleteQuietly()、readFileToString()PathMatcher:glob/regex 匹配文件名掌握 File 與 NIO.2 核心 API,文件操作不再是樣板代碼堆砌,而是清晰、健壯、高效的工程實踐。