ディレクトリから入力として取らなければならないファイルがたくさんあるコードを書いています。ディレクトリと同じ順番で入力ファイルを取る
プログラムは問題なく動作しますが、ファイルの選択方法に問題があります。私のディレクトリでソートを行うと、最初に表示されるファイルはfile5521.3
ですが、私のプログラムでは、最初に選択されたファイルはfile5521.100
です。これはかなり混乱しています。
また、私はArrays.sort(list, NameFileComparator.NAME_COMPARATOR)
を使ってみましたが、以前と同じ結果が得られます。
以下は私のコードです。
void countFilesInDirectory(File directory, String inputPath) throws IOException {
File[] list = directory.listFiles();
Arrays.sort(list, NameFileComparator.NAME_COMPARATOR);
for (int i = 0; i < list.length; i++) {
System.out.println(list[i]);
}
tempPath = inputPath.substring(0, inputPath.lastIndexOf("\\") + 1) + "OP\\";
File outPath = new File(tempPath);
if (!outPath.exists()) {
outPath.mkdir();
}
File temp = new File(tempPath + "temp.txt");
FileOutputStream fos = new FileOutputStream(temp);
if (!temp.exists()) {
temp.createNewFile();
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
for (int i = 0; i < list.length; i++) {
System.out.println(list[i]);
setStatusText(i);
GenerateFiles(list[i].getAbsoluteFile().toString(), bw);
}
bw.write("</body>");
bw.close();
File newFile = new File(temp.getParent(), "Index.html");
Files.move(temp.toPath(), newFile.toPath());
}
どうすればいいのか教えてください。最終更新日付と
作業溶液
Comparator
は、最終更新日が正常に動作しますが、私はコードの下でそれをしようとします。結果は以前と同じです。
Arrays.sort(list, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return o1.getName().compareTo(o2.getName());
}
});
私のWindowsエクスプローラでは、以下のようになります。私はファイル名をソートしました。
そして、私のコンソール出力は以下を示します。
おかげ
処理の順序はどうしてですか?そしてもしそうであれば、ディレクトリ名と文字列に基づくソートの違いを避けるために、ファイル名の規則にそれを反映させて、明白に同じにします。 – ManoDestra
あなたのOSは何ですか?「私のディレクトリ内で**私が並べ替えを行うと**最初に表示されるファイルは何ですか? –
ファイルの順序は、表示するソフトウェア(Windowsの場合はエクスプローラなど)によって決まります。同じロジックを使用するコンパレータを使用する必要があります。 – resueman