2012-02-21 18 views
-1

私の前のquestionに続き、私のプログラムは特定のディレクトリに作成されたばかりの300の画像を検出しません。代わりにdesktop.iniしか検出されません。実際には、そのディレクトリ内にファイルが作成されて存在することが物理的に分かります。Java - ファイルを検出することができません

誰かが次回プログラムを実行したときにこのようなことが起こる理由を説明していただけますか?

最初の実行時にディレクトリ内で何かが検出される唯一の方法は、プログラムがコンパイルされて実行される前にディレクトリに存在するファイルが少なくとも1つある場合です。

多くのありがとうございます。

UPDATE:次のようにファイルが検出されています

//Default greyscale image directory (to convert from greyscale to binary). 
static File dirGrey = new File("test_images\\Greyscale"); 
//Array of greyscale image filenames. 
static File imgListGrey[] = dirGrey.listFiles(); 
+2

ここではなく、元の質問でも、ファイルを「検出している」正確に記述しましたか?どのようにして擬似コード「新しいディレクトリ内のすべての画像に対して」ループを実装していますか?コードを表示します。 –

+4

あなたが追加したコードはおそらく問題を示しています。 'static'配列のファイルリストを作成するときには、配列を含むクラスがJavaクラスローダによってロードされたときに作成されます。これは、おそらく*画像ファイルを作成する*前*です。 –

+0

@ Joonasありがとう!私はファイルリストをメソッド自体に移動し、それがうまくいった。コメントを直接返信として投稿すると、私はそれを私の受け入れられた回答として選択します。 – MusTheDataGuy

答えて

1

static配列にファイルリストを作成しています。これは、配列を含むクラスがイメージファイルを作成する前のJavaクラスローダーによってロードされたときに作成されます。そのため配列には古いリストが含まれています。

staticはめったに必要ではなく、定数(42などの変更されないもの)、純関数(Math.sqrt())などの特殊なケースではほとんど役に立ちます。あなたがそれを使用するとき、あなたはすべてのトリッキーな初期化命令を習得しなければなりません。それ以外の場合は、静的でない変数を使用してください。

2

をあなたがイメージを作成する方法を知らなくても、この質問は、に似ている "今、私の机の下にあるどのように多くの子猫?

ファイルを自分で作成していますか?もしそうなら、それらのファイルを作成した後でそれらを参照するファイルハンドルをクローズしていますか?

+0

私の以前の質問では、このすべてについていくつか詳しく説明しています。しかし、私は特定のディレクトリ内のすべての[画像]ファイルを読み込み、グレースケールに変換して別の[空の]ディレクトリに保存しておきます。 a)a)プログラムを2回実行するか、またはb)最初に実行する前にディレクトリに少なくとも1つの[画像]ファイルを置く(この場合は、既存の画像のみが検出されます)画像が検出される)。 – MusTheDataGuy

+0

また、「desktop.ini」が「空の」ディレクトリで検出された理由を知りたいですか? – MusTheDataGuy

+2

質問は間違っていると思います。 Javaで書いた*コードは、あなたの要件を満たしていません。あなたの質問は、JDKが間違っているように聞こえます。あなたのコードを見ることなく、私はそうではないと賭けています。あなたのコードとJavaの動作の仕方を理解していることを前提にすれば、進歩はより速くなります。 – duffymo

関連する問題