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

Java 實作 Windows dir 指令:檔案系統列表與格式化輸出

     編輯:Java 相關知識

前言

模擬 Windows dir 指令輸出,包含日期、時間、<DIR> 標記、檔案大小(千分位格式化)、檔名,並依「目錄優先、名稱排序」規則排列。適合檔案管理系統參考。

核心類別

1. FileComparator - 目錄優先比較器

import java.util.Comparator;
import java.io.File;

public class FileComparator implements Comparator<File> {
    public int compare(File o1, File o2) {
        if (o1.isDirectory() && o2.isDirectory()) return o1.compareTo(o2);
        else if (o1.isDirectory() && !o2.isDirectory()) return -1;
        else if (!o1.isDirectory() && o2.isDirectory()) return 1;
        else return o1.compareTo(o2);
    }
}

2. TestFile - 主程式與格式化輸出

import java.io.File;
import java.util.*;
import java.sql.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.NumberFormat;

public class TestFile {
    static DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    static final int SIZE_WIDTH = 18; // 大小欄位寬度

    public static void main(String[] args) { test(); }

    public static void test() {
        System.out.println("----------test()----------");
        File dir = new File("F:\\SOFT_DEV");  // 修改為欲掃描路徑
        File[] files = dir.listFiles();
        Arrays.sort(files, new FileComparator());

        for (File f : files) {
            String dateStr = df.format(new Date(f.lastModified()));
            if (f.isDirectory()) {
                System.out.print(dateStr + " <DIR> ");
            } else {
                String sizeStr = NumberFormat.getInstance().format(f.length());
                System.out.print(dateStr + " " + padLeft(sizeStr, SIZE_WIDTH));
            }
            System.out.println(" " + f.getName());
        }
    }

    // 左補空白對齊
    static String padLeft(String s, int width) {
        int nb = width - s.length();
        if (nb > 0) return new String(new char[nb]).replace('\0', ' ') + s;
        return s;
    }
}

執行結果範例

----------test()----------
2008-06-20 13:01 <DIR>                  ACDSee v3.1 SR1 美化版 Plus
2008-06-20 13:01 <DIR>                  MyEclipse Enterprise Workbench 6.0.1 GA
2008-06-20 13:02 <DIR>                  PLSQL Developer v7.1.4 英文版
2008-06-20 13:02 <DIR>                  SQLyog Enterprise v6.5 英文版
2008-07-02 18:04 <DIR>                  staruml-5.0
2008-07-07 18:45 <DIR>                  Stylus Studio 2008 XML Enterprise Suite v9.1.1050g 官方中文企業版
2008-06-20 13:02 <DIR>                  Sybase.PowerDesigner.v12.5.0.2169
2008-06-20 13:02 <DIR>                  輸入法設置工具 IME TOOL v2.5.9
2008-04-10 18:56               23,510,720 dotnetfx.exe
2006-06-15 11:22               54,666,120 idea-5.1.2.exe
2008-03-18 19:16               90,648,728 idea-7.0.3.exe
2008-04-11 16:08                  428,538 IEDevToolBarSetup.rar
2006-06-18 00:00                  148,480 IntJ512kg.exe
2008-01-31 11:12               54,278,424 jdk-1_5_0_14-windows-i586-p.exe
2008-05-29 19:07              184,893,774 MyEclipse_6.0.1GA_E3.3.1_Installer.exe
2008-06-24 11:33              461,013,238 MyEclipse_6.5.0GA_E3.3.2_Installer.exe
2008-05-30 08:15                4,320,768 mysql-connector-odbc-5.1.4-win32.msi
2007-02-04 11:08              541,075,612 Rational Rose Enterprise V7.0.nrg
2001-05-26 21:31                   23,264 rational_perm.dat
2008-04-14 10:39               10,000,152 spket-1.6.11.jar
2008-06-27 14:45                  113,784 tcpTrace081.zip
2008-05-12 15:31               28,847,842 ToadForMySQLFreeware_3.1.1.462.zip
2008-04-12 09:57                1,833,339 UltraISO 9.12 簡體中文版.rar
2008-06-11 14:39               16,672,737 Windows Live Messenger(MSN) 8.5.1302.1018_簡體去廣告搜索多開版_微軟聊天工具.rar

執行畫面截圖

關鍵技術點

  • Comparator 介面:自訂排序邏輯,目錄優先、同類別名稱自然排序。
  • SimpleDateFormat:日期時間格式化 yyyy-MM-dd HH:mm。
  • NumberFormat.getInstance():依當前 Locale 自動套用千分位分隔符。
  • String 左補空白:對齊檔案大小欄位,模擬 dir 固定寬度輸出。
  • File.lastModified():取得最後修改時間毫秒數,轉 java.sql.Date 格式化。

擴充建議

  1. 支援遞迴掃描子目錄(File.listFiles() + 遞迴)。
  2. 加入命令列參數解析(路徑、過濾模式、排序鍵)。
  3. 輸出重導向至檔案或 GUI 元件(JTable)。
  4. 整合圖示關聯(FileSystemView.getSystemIcon())。

原文出處

本文出自「熔岩」博客:https://lavasoft.blog.51cto.com/62575/89289

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