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

yyyy-MM-dd HH:mm。dir 固定寬度輸出。java.sql.Date 格式化。File.listFiles() + 遞迴)。FileSystemView.getSystemIcon())。本文出自「熔岩」博客:https://lavasoft.blog.51cto.com/62575/89289