將 days.txt 所有字符按 Unicode 碼點升序寫入 days01.txt,忽略換行、空格、Tab、回車。
package com.dragon.java.filesort;
import java.io.*;
import java.util.*;
public class FileCharSort {
public static void main(String[] args) {
FileReader fr = null;
FileWriter fw = null;
List<Character> list = new ArrayList<>();
try {
fr = new FileReader("src/com/dragon/java/days.txt");
fw = new FileWriter("src/com/dragon/java/days01.txt");
char[] buf = new char[1024];
int len;
while ((len = fr.read(buf)) != -1) {
for (int i = 0; i < len; i++) { // 只遍歷有效長度,避免 buf 剩餘空字符
char c = buf[i];
if (c == '\r' || c == '\n' || c == ' ' || c == '\t') continue;
list.add(c);
}
}
Collections.sort(list); // Character 實現 Comparable,按碼點排序
char[] out = new char[list.size()];
for (int i = 0; i < out.length; i++) out[i] = list.get(i);
fw.write(out);
} catch (IOException e) {
e.printStackTrace();
} finally {
closeQuietly(fr);
closeQuietly(fw);
}
}
private static void closeQuietly(Closeable c) {
if (c != null) try { c.close(); } catch (IOException ignore) {}
}
}
fr.read(buf) 返回實際讀取長度,迴圈 i < len 避免緩衝區尾部 \u0000 干擾。Collections.sort(list) 直接利用 Character.compareTo 按 Unicode 排序。Closeable 統一關閉,簡潔健壯。輸入:Hello World!
輸出:!HWdellloor
(去除空格換行後,字符按碼點:!(33) H(72) W(87) d(100) e(101) l(108)...)