2011-06-30 3 views
5

これは私の心の中ではひどい疑問ですが、少しでも運が良いと便利なドキュメントを見つけるために最善を尽くしました。 -Java File.list()の一貫した注文ですか?

私はすべてのファイルに対していくつかの操作を行う必要がありますディレクトリ。ディレクトリFileにディレクトリを設定し、fileObject.list()を使用してディレクトリ内のファイルを繰り返し処理します。私はこのコードを一晩中実行したままにしておき、ある時点でクラッシュした。私は何が起こったのかを把握しようとしている(はい、私はひどい伐採をしていた)。さて、this javadocによれば、ファイルをリストする際にアルファベット順やそれ以外の順序の保証はありません。一貫性の保証があるのでしょうか?つまり、同じコードを2回実行すると、ファイルの順序は同じになりますか?ロジックはそれが私には、私はそれに基づいて操作を再開したが、私はこれが疑わしいと言います。また、私はjavadocから「特定の順序の手段がない」ことに興味があります。

+1

注文を保証したい場合は、なぜ「コンパレータ」を使用しないのですか? – mre

+0

アプリの実行中にファイルが変更される可能性があります。そのため、実行ごとに異なるものになる可能性があります。順序は、ファイルシステムの実装に依存する可能性が最も高いです。ほとんどの場合、コマンドラインで "ls"や "dir"を実行すると、一貫性が保証されますが、アルファベット順のソートは保証されないように、「はい、一貫性があります」という回答が多分あります。 – ricosrealm

+0

ああ、私は(今)だろうが、これは失敗した実行を再開し、処理されたファイルを繰り返すことを望まない。 – kyun

答えて

13

この言語は、実行から実行までの一貫性を含むオーダーのプロパティに頼るべきではないことを意味します。

メモリ内のデータ構造にリンクされたファイルのリストがある場合、ドライバは最近アクセスしたファイルをリストの先頭に移動して、ファイルの繰り返しアクセスを最適化します。これにより、ファイルが変更されていなくても、ファイルがリストされる順序が変更される可能性があります。

あなたが一貫性のある順序を使用する場合は、あなたが

Arrays.sort(
    myFileArray, 
    new Comparator<File>() { 
    public int compare(File a, File b) { 
     return a.getName().compareTo(b.getName()); 
    } 
    }); 
+1

それは心配です。そして私が期待していたもののようなもの。どのファイルが処理され、どのファイルが処理されなかったのかを知る方法はありません。ひどい伐採である。並べ替えは理にかなっていますが、全体を開始する場合は便利です。しかし、ありがとう! – kyun

+4

Java 7の新しい 'WatchService' APIを調べる価値があるかもしれません。 http:// stackoverflow。com/questions/494869/file-changed-listener-in-java/494957#494957 –

+0

+1の 'WatchService'について...そのものはセクシーです! – mre

0

あなたが見ているファイルは、呼び出しの間に変更されず、まったく同じプラットフォームで2回実行されていると仮定すると、同じ結果が得られると思います。

+0

私の希望も同様です。その目的のためのドキュメントがあるかどうか疑問に思っています。 – kyun

+0

基本的には、 。私はマイクの答えが好きです。 – mkro

+0

それはとても重要なので、私はプログラムをもう一度実行しますが、最初にファイルをソートしていくつかのログを実装します – woliveirajr

0

ような何かを行うことができていないファイルがあることを考えると、順序の保証はありませんが、私の知る限りない「矛盾の保証」がないので、それを2回呼び出します何らかの形で変更または触れられた場合、おそらくあなたに同じ順序が与えられます。しかし、あなたがそれらを「処理している」場合、おそらく触れられているでしょう。

でも、一貫性に頼っているのであれば、それらを並べ替えることをお勧めします。

+0

:)私はもっと明確にすべきだった - 私はそれらを編集しているのではなく、それらを読んでいる。したがって、ディレクトリ構造とファイルは変更されません。それは、Mike Samuel氏が指摘しているように、ファイルシステムにはおそらくオーダーでの役割があるため、まったく同じオーダーを得られない可能性があります。 – kyun

+0

注文が保存されているかどうか試してみることができます。これは、停止した場所から実行を続けるのに十分安定しているかどうかを確認する最も簡単な方法です。 – trutheality

+0

私はやっていいよね。しかし、それは何が質問につながったのか、それはいつも真実であるのか、今度は幸運なのかしら – kyun

0

ドキュメントには、ファイルの順序付けはありません。特に、2回の呼び出しが異なる順序を返すことがあります。特定の発注を希望する場合は、アルファベット順に並べ替える必要があります。

関連する問題