1. 程式人生 > 其它 >檔案IO的兩個小需求

檔案IO的兩個小需求

技術標籤:java進階筆記

首先來一刀小需求:

列印指定目錄下的所有的以.txt結尾的檔案

思路也好辦,首先使用一個File類來完成指定路徑的封裝,然後使用遞迴找到這個指定目錄下所有檔案,只要檔名字以.txt結尾,就列印當前檔案的名字
檔案目錄如下:
在這裡插入圖片描述實現程式碼如下:

public static void main(String[] args) {
        File file = new File("D:\\BaiduNetdiskDownload\\dailyLearning\\src\\com\\llm\\test");
        printTxt
(file); } public static void printTxt(File file){ if (file == null) return; if (file.isDirectory()){ File[] files = file.listFiles(); for (File f : files) { printTxt(f); } }else { String fileName =
file.getName(); if (fileName.endsWith(".txt")) { System.out.println(fileName); } } }

當然,File類也有自己的操作,可以使用File類過載的listFiles(FilenameFilter filter)方法

public static void main(String[] args) {
        File file = new File("D:\\BaiduNetdiskDownload\\dailyLearning\\src\\com\\llm\\test\\demo"
); File[] files = file.listFiles(new MyFileNameFilter()); for (File f : files) { System.out.println(f.getName()); } } static class MyFileNameFilter implements FilenameFilter{ //File dir: 父級檔案的名字 //String name: 當前檔案的名字 @Override public boolean accept(File dir, String name) { if(name.endsWith(".txt")){ return true; } return false; } }

反正,兩種方案,大家按需選擇,這兩種方法有區別:

  • 使用listFiles(..)方法只會遍歷當前目錄下的所有檔案!!!

然後,就可以探討File類後面的知識點,流的操作啦

又一個小需求!!!

流的分類大家都清楚,輸入流,輸出流,節點流這些都是不同角度劃分出來的不同分類,大家可以自行百度詳細情況

是用流實現檔案的複製

//使用Java實現檔案的複製
        File inFile = new File("D:\\BaiduNetdiskDownload\\dailyLearning\\src\\com\\llm\\test\\demo\\a.txt");
        File outFile = new File("D:\\BaiduNetdiskDownload\\dailyLearning\\src\\com\\llm\\test\\demo\\b.txt");
        if (!outFile.exists()){
            //如果沒有就建立一個
            try {
                outFile.createNewFile();
            } catch (IOException e) {
                System.err.println("建立檔案失敗:"+outFile.getAbsolutePath());
            }
        }
        //宣告輸入和輸出流
        FileInputStream fIn = null;
        FileOutputStream fOu = null;
        try {
            fIn = new FileInputStream(inFile);
            fOu = new FileOutputStream(outFile);
            byte[] bytes = new byte[1024];
            int len = 0;
            while ((len = (fIn.read(bytes))) != -1){
                fOu.write(bytes,0,len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (fIn!=null){
                try {
                    fIn.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fOu!=null){
                try {
                    fOu.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

最後結果如下:
在這裡插入圖片描述