3

処理の結果、一部のデータ ファイルがディスクに書き込まれます。

  • 2 つのサーバー (MAC と Linux) 間のファイル数が一致する
  • ファイル名はシステム間で同一です
  • ファイルの内容は、md5sum によって測定されるように、システム間で同一です

次に、レポートは、上記のファイルから読み取られたコンテンツに基づいて計算されます。

    for (File f : contentDirectory.listFiles()) {
               // magic

.listFiles()javadoc 言います:

結果の配列内の名前文字列が特定の順序で表示されるという保証はありません。特に、アルファベット順に表示されるとは限りません。

それは本当ですが、ファイルがリストされる順序はランダムではありませんよね?つまり、同じファイルを 2 回リストしても同じ結果が得られるということで、これは正しいですか?

これは、ファイルが 2 つの異なるシステムにリストされている場合、順序が同じではない可能性が高いということですか?

最終的に大きな問題は、ファイルが保存されている OS に関係なく、ディレクトリ内のファイルを同じ順序で一覧表示する方法です。

4

4 に答える 4

5

彼らは注文を保証するものではありません。だからそれに頼らないでください。今日動作することを確認できても、明日は動作しない可能性があります。または、4K を超えるファイルを含むリスト。または、あなたが知らない他のランダムな基準。

注文したい場合は簡単です。繰り返し処理する前に、リストを並べ替えます。

于 2012-08-03T21:02:04.793 に答える
2

ファイルを並べ替えるだけです。Fileは比較可能であるため、コンパレータは必要ありません。

File[] files = File.listRoots()[0].listFiles();
Arrays.sort(files);
System.out.println(Arrays.asList(files));

(この例では、最初のルート ディレクトリからファイルを取得するだけで、すべてのコンピューターに何らかのコンテンツがあるはずです;))

ツリー セットを作成できるように、ファイル オブジェクトは一意である必要があります。

for (File file : new TreeSet<File>(Arrays.asList(contentDirectory.listFiles()))) {
    System.out.println(file.getName());  // replace with magic ;)
}
于 2012-08-03T21:07:26.583 に答える
2

順序は、ローカル JVM および/またはローカル ファイルシステムの実装の詳細に依存すると予想されます。ほとんどの場合、ファイルはそのフォルダーのファイルシステムの目次と同じ順序でリストされます。これは、ファイルがフォルダーに追加された順序またはその他の詳細に依存する場合があります。

プログラムがファイルが特定の順序になっていることに依存している場合、最善の策は、ファイル名のリストを取得し、好きなように並べ替えてから、ファイルを開くことです。そうすれば、ローカルの実装の詳細に依存しなくなります。

于 2012-08-03T21:02:38.590 に答える
0
public class File  implements Serializable, Comparable<File>

java.util.Collections.sort()したがって、ファイルをリストにダンプするとうまく機能します。

Java 7 のリリース ノートを読むと、「保証されていない」が変更された多くのケースと、「非公開」API が削除または変更された他の場所が表示されます。ドキュメントが信頼できないと言っている場合は、信頼できません。これは、メジャー リリースまたはマイナー リリースで変更される可能性があります。

于 2012-08-03T21:06:43.323 に答える