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

Java 實現 U 盤/記憶卡大文件掃描清理工具完整實戰

     編輯:Java 程式設計入門

項目背景與需求分析

移動存儲設備(U 盤、SD 卡、手機內存)長期使用後會積累大量臨時文件、緩存、廢棄安裝包等「垃圾文件」,佔用寶貴空間。本文實現一個 Java 命令行工具,支持遞歸掃描指定目錄,按文件大小篩選並降序排列,幫助用戶快速定位並清理大體積無用文件。

核心功能設計

  • 遞歸遍歷:深度優先搜索遍歷目錄樹,覆蓋所有子目錄
  • 大小閾值過濾:用戶指定最小文件大小(MB),忽略小文件干擾
  • 多維度排序:按文件大小降序排列,同等大小可按修改時間輔助排序
  • 友好輸出:顯示完整路徑、大小(KB)、創建日期(yyyyMMdd)
  • 交互式輸入:運行時動態輸入掃描路徑與大小閾值

實體類設計:FileItem

package com.he.jinbin;

import java.util.Date;

/**
 * 文件信息封裝類,實現 Comparable 接口支持自定義排序
 */
public class FileItem implements Comparable<FileItem> {
    private String fileName;  // 完整路徑
    private long size;        // 文件大小(字節)
    private Date createTime;  // 最後修改時間

    public FileItem(String fileName, long size, Date createTime) {
        this.fileName = fileName;
        this.size = size;
        this.createTime = createTime;
    }

    // Getter/Setter 方法省略...

    @Override
    public int compareTo(FileItem other) {
        // 降序:大文件在前
        return Long.compare(other.size, this.size);
    }
}

核心業務邏輯:Sort 類

package com.he.jinbin;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

/**
 * 掃描排序主類
 */
public class Sort {
    private static final long MB = 1024L * 1024L;  // 1MB 字節數
    private static List<FileItem> fileItems = new ArrayList<>();
    private static long sizeThreshold = MB;  // 默認 1MB

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        
        // 1. 獲取掃描路徑
        System.out.print("請輸入掃描目錄路徑(如 H:\\):");
        String scanPath = reader.readLine().trim();
        
        // 2. 獲取大小閾值
        System.out.print("請輸入最小文件大小(單位 MB,如 10):");
        String input = reader.readLine().trim();
        sizeThreshold = Long.parseLong(input) * MB;
        reader.close();

        System.out.println("正在掃描,請稍候...");
        File root = new File(scanPath);
        if (!root.exists() || !root.isDirectory()) {
            System.err.println("路徑無效或不是目錄!");
            return;
        }

        // 3. 遞歸掃描
        scanFiles(root);
        
        // 4. 排序並輸出
        Collections.sort(fileItems);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        System.out.println("\n掃描完成,共發現 " + fileItems.size() + " 個符合條件的文件(按大小降序):");
        System.out.println("----------------------------------------------------------------");
        for (FileItem item : fileItems) {
            System.out.printf("%s\t%d KB\t%s%n", 
                item.getFileName(), 
                item.getSize() / 1024, 
                sdf.format(item.getCreateTime()));
        }
    }

    /**
     * 遞歸掃描文件
     */
    private static void scanFiles(File dir) {
        File[] files = dir.listFiles();
        if (files == null) return;  // 權限不足或非目錄
        
        for (File file : files) {
            if (file.isDirectory()) {
                scanFiles(file);  // 遞歸進入子目錄
            } else if (file.length() >= sizeThreshold) {
                // 滿足大小條件,記錄文件信息
                fileItems.add(new FileItem(
                    file.getAbsolutePath(),
                    file.length(),
                    new Date(file.lastModified())
                ));
            }
        }
    }
}

運行效果演示

D:\project\SortSize\bin>java com.he.jinbin.Sort
請輸入掃描目錄路徑(如 H:\):H:\
請輸入最小文件大小(單位 MB,如 10):10
正在掃描,請稍候...

掃描完成,共發現 6 個符合條件的文件(按大小降序):
----------------------------------------------------------------
H:\.android_secure\com.sg.android.fish-1.asec     3622400 KB    20130525
H:\BaiduMap\vmp\h\quanguogailue.dat               2761601 KB    20130512
H:\Download\RedGame_Android_2017-11-06.apk        2656309 KB    20131111
H:\ugame\ugameSDK\downloads\6F9757F4442DD99FC89FA387C80405D2.apk  2630596 KB    20131025
H:\Download\com.tencent.mobileqq_60.apk           2541788 KB    20130714
H:\Android\data\com.android.gallery3d\cache\imgcache.0  2207078 KB    20140210

進階優化建議

1. 性能優化

  • 使用 Files.walkFileTree (NIO.2) 替代傳統 File.listFiles(),支持更好的異常處理與並行遍歷
  • 大目錄掃描時添加進度顯示或多線程分區掃描
  • 結果集過大時考慮分頁或僅輸出 Top N

2. 功能增強

  • 增加文件類型過濾(如僅掃描 .apk、.tmp、.cache 等)
  • 支持按最後訪問時間、創建時間等多維度排序
  • 集成文件刪除確認機制,直接在工具中完成清理
  • 導出掃描報告為 CSV/HTML 格式便於歸檔分析

3. 健壯性提升

  • 處理符號鏈接避免循環遍歷
  • 捕獲 SecurityException 優雅跳過無權限目錄
  • 支持長路徑(Windows 260 字符限制)

項目結構與打包運行

SortSize/
├── src/
│   └── com/he/jinbin/
│       ├── FileItem.java
│       └── Sort.java
└── bin/  (編譯輸出目錄)

# 編譯
javac -d bin src/com/he/jinbin/*.java

# 運行
java -cp bin com.he.jinbin.Sort

總結

本工具通過簡潔的遞歸遍歷與集合排序,實用解決了存儲設備大文件排查難題。代碼結構清晰,擴展性強,適合作為文件系統操作的入門實戰項目。實際部署時可封裝為可執行 JAR 或配合腳本實現定時自動化清理。

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