2016-04-01 20 views
1

ディレクトリから入力として取らなければならないファイルがたくさんあるコードを書いています。ディレクトリと同じ順番で入力ファイルを取る

プログラムは問題なく動作しますが、ファイルの選択方法に問題があります。私のディレクトリでソートを行うと、最初に表示されるファイルは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エクスプローラでは、以下のようになります。私はファイル名をソートしました。

enter image description here

そして、私のコンソール出力は以下を示します。

enter image description here

おかげ

+0

処理の順序はどうしてですか?そしてもしそうであれば、ディレクトリ名と文字列に基づくソートの違いを避けるために、ファイル名の規則にそれを反映させて、明白に同じにします。 – ManoDestra

+0

あなたのOSは何ですか?「私のディレクトリ内で**私が並べ替えを行うと**最初に表示されるファイルは何ですか? –

+0

ファイルの順序は、表示するソフトウェア(Windowsの場合はエクスプローラなど)によって決まります。同じロジックを使用するコンパレータを使用する必要があります。 – resueman

答えて

1

If your OS is Windows XP or later, your files will be sorted using Numerical File Name Sorting.

あなたがプログラムにし、あなたのファイルエクスプローラで、両方のファイルの順序を一致させたいので、あなたがいずれかを行うことができます

  1. は、手順に従ってくださいクラシックリテラルソートを使用するリンクには、ファイルエクスプローラの表示方法が変更されます。
  2. あなたは数の実績値に基づいて分類されますsortに渡すカスタムComparatorを作成します(例:3が来る前に、10ので3 < 10)
+0

こんにちは、私はこれを試しましたが、まだ結果に変更はありません:( – Rakesh

1

あなたがにのApache CommonsのIOを使用することができます

import org.apache.commons.io.comparator.*; 

File dir = new File("."); 
File[] files = dir.listFiles(); 
File[] filesSorted = DefaultFileComparator.DEFAULT_COMPARATOR.sort(files); 
File[] filesReversed = DefaultFileComparator.DEFAULT_REVERSE.sort(files); 
:ここ CompositeFileComparator

使用して、これらを組み合わせても、多くの定義済みのComparator Sを使用してファイルを並べ替えたりすることは一例です

...およびhere is the list of available comparators

+0

私はこれを行うと、私はいくつかのエラーを投げていると言って 'メソッドの並べ替え(ファイル[])はタイプコンパイラ'のために定義されていません – Rakesh

+0

こんにちは – Rakesh

+0

@Rakesh字句解析を使って文字列を並べ替えると、次のような結果が得られます。A1 diginoise

関連する問題