1. 程式人生 > >Java 檔案操作 & 目錄操作

Java 檔案操作 & 目錄操作

檔案操作

  • 寫入檔案、讀取內容、刪除檔案
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) {

        // 寫入檔案
        try {
            // 建立檔案
File file = new File("test.txt"); if (file.createNewFile()) System.out.println("檔案建立成功!"); else System.out.println("出錯了,該檔案已經存在。"); // 在當前目錄下生產一個txt檔案 BufferedWriter out = new BufferedWriter(new FileWriter("test.txt"
)); out.write("向檔案寫入內容"); out.close(); } catch (IOException e) { e.printStackTrace(); } // 讀取內容 try { BufferedReader in = new BufferedReader(new FileReader("test.txt")); String str; while ((str = in.readLine()) != null
) { System.out.println(str); } in.close(); } catch (IOException e) { } // 刪除檔案 try{ File file = new File("test.txt"); if(file.delete()){ System.out.println(file.getName() + " 檔案已被刪除!"); }else{ System.out.println("檔案刪除失敗!"); } }catch(Exception e){ e.printStackTrace(); } } }
  • 使用 BufferedWriter 類的 read 和 write 方法將檔案內容複製到另一個檔案
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.OutputStream;

public class Demo {
    public static void main(String[] args) throws Exception {
        BufferedWriter out1 = new BufferedWriter(new FileWriter("srcfile.txt"));
        out1.write("string to be copied\n");
        out1.close();
        InputStream in = new FileInputStream(new File("srcfile.txt"));
        OutputStream out = new FileOutputStream(new File("destnfile.txt"));
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
        BufferedReader in1 = new BufferedReader(new FileReader("destnfile.txt"));
        String str;
        while ((str = in1.readLine()) != null) {
            System.out.println(str);
        }
        in1.close();
    }
}
  • 使用 filewriter 方法向檔案中追加資料
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws Exception {
        try {
            BufferedWriter out = new BufferedWriter(new FileWriter("filename.txt"));
            out.write("aString1\n");
            out.close();
            out = new BufferedWriter(new FileWriter("filename.txt", true));
            out.write("aString2");
            out.close();
            BufferedReader in = new BufferedReader(new FileReader("filename.txt"));
            String str;
            while ((str = in.readLine()) != null) {
                System.out.println(str);
            }
            in.close();
        } catch (IOException e) {
            System.out.println("exception occoured" + e);
        }
    }
}
  • 使用 File 類的 createTempFile(String prefix, String suffix); 方法在預設臨時目錄來建立臨時檔案,引數 prefix 為字首,suffix 為字尾
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class Demo {
    public static void main(String[] args) throws Exception {
        // 建立臨時檔案,可以使用 createTempFile(String prefix, String suffix, File directory) 中的
        // directory 引數來指定臨時檔案的目錄
        File temp = File.createTempFile("tmp", ".txt");
        System.out.println("檔案路徑: " + temp.getAbsolutePath());
        // 終止後刪除臨時檔案
        temp.deleteOnExit();
        BufferedWriter out = new BufferedWriter(new FileWriter(temp));
        out.write("aString");
        System.out.println("臨時檔案已建立:");
        out.close();
    }
}
  • 使用 File 類的 fileToChange.lastModified() 和 fileToChange setLastModified() 方法來修改檔案最後的修改日期
import java.io.File;
import java.util.Date;

public class Demo {
    public static void main(String[] args) throws Exception {
        File fileToChange = new File("test.txt");
        fileToChange.createNewFile();
        Date filetime = new Date(fileToChange.lastModified());
        System.out.println(filetime.toString());
        System.out.println(fileToChange.setLastModified(System.currentTimeMillis()));

        // 獲取檔案最後的修改時間
        File file = new File("test.txt");
        Long lastModified = file.lastModified();
        Date date = new Date(lastModified);
        System.out.println(date.toString());
    }
}
  • 使用 File 類的 file.exists() 和 file.length() 方法來獲取檔案大小,以位元組計算(1KB=1024位元組 )
  • 使用 File 類的 oldName.renameTo(newName) 方法來重新命名檔案
  • 設定檔案只讀
  • 在指定目錄中建立檔案
import java.io.File;
import java.io.IOException;

public class Demo {

    // 獲取檔案大小
    public static long getFileSize(String filename) {
        File file = new File(filename);
        // 檢測檔案是否存在
        if (!file.exists() || !file.isFile()) {
            System.out.println("檔案不存在");
            return -1;
        }
        return file.length();
    }

    public static void main(String[] args) {

        // 獲取檔案大小
        long size = getFileSize("test.txt");
        System.out.println("檔案大小為: " + size);

        // 檔案重新命名
        File oldName = new File("test.txt");
        File newName = new File("new.txt");
        if (oldName.renameTo(newName)) {
            System.out.println("已重新命名");
        } else {
            System.out.println("Error");
        }

        // 設定檔案只讀
        File file = new File("new.txt");
        System.out.println(file.setReadOnly());
        System.out.println(file.canWrite());

        // 使用 File 類的 file.createTempFile() 方法在指定目錄中建立檔案
        File cfile = null;
        File dir = new File("D:\\eclipse-workspace\\hello");
        try{
            cfile = File.createTempFile("text", ".txt", dir);
        }catch(IOException e) {
        }
        System.out.println(cfile.getPath());
    }
}

目錄操作

import java.io.File;
import java.io.FileFilter;
//import java.io.FilenameFilter;
import java.util.Date;

import org.apache.commons.io.FileUtils;

public class Demo {

    public static void main(String[] args) {
        recCreDir("D:\\a\\b\\c");
        delDir(new File("D:\\a"));
        empDir(new File("D:\\eclipse"));
        // 判斷檔案是否隱藏
        System.out.println(new File("D:\\test.txt").isHidden());
        // 獲取目錄大小,先再專案中匯入commons-io-2.6.jar
        long size = FileUtils.sizeOfDirectory(new File("D:\\eclipse"));
        System.out.println("Size:" + size + "bytes");
        // 在指定目錄中查詢所有檔案列表
        finFil(new File("D:\\eclipse"));
        // 獲取檔案的上級目錄
        File file = new File("D:\\test.txt");
        String strParentDirectory = file.getParent();
        System.out.println("檔案的上級目錄:" + strParentDirectory);
        // 獲取目錄最後修改時間
        System.out.println("最後修改時間:" + new Date(file.lastModified()));
        // 列印目錄結構
        // strDir(1, new File("D:\\eclipse\\java-oxygen\\eclipse"));
        // 遍歷指定目錄下的所有目錄
        allDir(new File("D:\\eclipse\\java-oxygen\\eclipse"));
        allFil(new File("D:\\eclipse\\java-oxygen\\eclipse"));
        // 檢視系統根目錄
        rooDir();
        // 檢視當前工作目錄
        System.out.println("當前工作目錄:" + System.getProperty("user.dir"));
        // 遍歷目錄
        traDir(new File("D:\\eclipse-workspace\\hello"));
        System.out.println("hello, world");
    }

    // 遞迴建立目錄
    public static void recCreDir(String dir) {
        File file = new File(dir);
        // 使用 File 類的 mkdirs() 實現遞迴建立目錄
        boolean result = file.mkdirs();
        System.out.println("遞迴建立目錄:" + result);
    }

    // 刪除目錄
    public static boolean delDir(File dir) {
        if (dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                boolean success = delDir(new File(dir, children[i]));
                if (!success) {
                    return false;
                }
            }
        }
        if (dir.delete()) {
            System.out.println("目錄已被刪除");
            return true;
        } else {
            System.out.println("目錄刪除失敗");
            return false;
        }
    }

    // 判斷目錄是否為空
    public static void empDir(File dir) {
        if (dir.isDirectory()) {
            if (dir.list().length > 0) {
                System.out.println("目錄不為空");
            } else {
                System.out.println("目錄為空");
            }
        } else {
            System.out.println("這不是一個目錄");
        }

    }

    // 在指定目錄中查詢檔案
    public static void finFil(File dir) {

        // // 在 C 盤中查詢以字母 'b' 開頭的所有檔案
        // FilenameFilter filter = new FilenameFilter() {
        // public boolean accept(File dir, String name) {
        // return name.startsWith("b");
        // }
        // };
        // String[] children = dir.list(filter);

        String[] children = dir.list();
        if (children == null) {
            System.out.println("該目錄不存在");
        } else {
            for (int i = 0; i < children.length; i++) {
                String filename = children[i];
                System.out.println(filename);
            }
        }
    }

    // 列印目錄結構
    public static void strDir(int indent, File file) {
        for (int i = 0; i < indent; i++)
            System.out.print('-');
        System.out.println(file.getName());
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (int i = 0; i < files.length; i++) {
                strDir(indent + 4, files[i]);
            }
        }
    }

    // 遍歷指定目錄下的所有目錄
    public static void allDir(File dir) {
        File[] files = dir.listFiles();
        FileFilter fileFilter = new FileFilter() {
            public boolean accept(File file) {
                return file.isDirectory();
            }
        };
        files = dir.listFiles(fileFilter);
        System.out.println(files.length);
        if (files.length == 0) {
            System.out.println("目錄不存在或它不是一個目錄");
        } else {
            for (int i = 0; i < files.length; i++) {
                File filename = files[i];
                System.out.println(filename.toString());
            }
        }
    }

    // 遍歷指定目錄下的所有檔案
    public static void allFil(File dir) {
        String[] children = dir.list();
        if (children == null) {
            System.out.println("目錄不存在或它不是一個目錄");
        } else {
            for (int i = 0; i < children.length; i++) {
                String filename = children[i];
                System.out.println(filename);
            }
        }
    }

    // 遍歷系統根目錄
    public static void rooDir() {
        File[] roots = File.listRoots();
        System.out.println("系統所有根目錄:");
        for (int i = 0; i < roots.length; i++) {
            System.out.println(roots[i].toString());
        }
    }

    // 遍歷目錄
    public static void traDir(File dir) {
        System.out.println(dir);
        if (dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                traDir(new File(dir, children[i]));
            }
        }
    }
}