首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java File 文件操作全攻略:創建、刪除、遍歷、屬性讀寫與管道通信

     編輯:Java 綜合教學

Java File 文件操作全攻略

java.io.File 類代表文件/目錄路徑(不保證存在),是文件系統的抽象視圖。本文覆蓋創建/刪除/重命名、目錄操作、屬性讀取/設置、遞歸遍歷、文本讀寫、管道線程通信六大實戰場景。

1. 文件創建、刪除、重命名

// 創建文件(跨平台用 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);  // 同目錄下即重命名,跨目錄即移動

2. 目錄操作

// 單級目錄
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();
}

3. 文件屬性讀取與設置


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();  // 僅讀,不可逆(需文件系統支持)

4. 遞歸遍歷目錄樹(帶縮進美化)


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

5. 文本文件讀寫(指定 UTF-8,try-with-resources)


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

6. 管道流實現線程間通信


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();

7. 常用工具類推薦

  • Files (NIO.2):Files.copy()、Files.walk()、Files.readAllLines() 更現代、鏈式調用
  • FileUtils (Apache Commons IO):copyDirectory()、deleteQuietly()、readFileToString()
  • PathMatcher:glob/regex 匹配文件名

掌握 File 與 NIO.2 核心 API,文件操作不再是樣板代碼堆砌,而是清晰、健壯、高效的工程實踐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved