こんにちは、私は Java の問題を抱えています。私の上級研究クラスでは、ほぼ終了しましたが、生成した画像のデータを分析する必要があります。必須の課題の一部ではないため、これを宿題としてタグ付けしたくありません...結果を収集するために自分で思いついたものです. 2 つの画像をピクセル単位で比較するプログラムを作成しました。これは、2 つのディレクトリ内のすべての .bmp ファイルに対して行われます。さて、私のプログラムはファイル名を文字列配列に読み込み、すべてのファイル名の値をチェックしたので、最初はディレクトリとファイル名が正常にアクセスされていることがわかりました。問題のあるコードは次のとおりです。
public static void main(String[]args) throws IOException
{
File actualDir = new File("C:\\Users\\Rowe\\Desktop\\testExpect");
String actualFiles[] = actualDir.list();
File expectedDir = new File("C:\\Users\\Rowe\\Desktop\\testExpect2");
String expectedFiles[] = expectedDir.list();
int[][] stats = new int[actualFiles.length][6]; // Holds all info
//Columns, Rows, Total, redMatches, shouldaBeenRed, badRed
for(int i = 0; i < actualFiles.length; i++)
{
BufferedImage actualImage = null;
System.out.println(actualFiles[i]); //THIS PRINTS PROPERLY
System.out.println(System.getProperty("user.dir")); //FOR TESTING
actualImage = ImageIO.read(new File("C:\\Users\\Rowe\\Desktop\\testExpect\\"+actualFiles[i])); //ERROR HERE
BufferedImage expectedImage = null;
expectedImage = ImageIO.read(new File("C:\\Users\\Rowe\\Desktop\\testExpect2\\"+expectedFiles[i])); //THIS IMAGE WORKS
...rest of code
ここで、ディレクトリを同じになるように変更すると、プログラムが実行され、すべてのピクセルが 100% 似ていることが検出されます (そうあるべきなので、プログラムがやりたいことを実行することがわかります)。エラーは次のとおりです。
Exception in thread "main" javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(Unknown Source)
at PixelCompare.main(PixelCompare.java:22)
別のディレクトリを試してみましたが、役に立ちませんでした。.bmp ファイルに関するものでしょうか? BMP の 1 つのセットが正常に読み取られ、別のセットが機能しない原因は何でしょうか? 必要なファイルはすべて他のプログラムで開くことができるので、ファイルが破損することはありません。すべてのプロパティは同じように見えます。1 つのディレクトリは Gimp で手作りされ (これらは問題なく読み取れます)、別のディレクトリは Java ベースのプログラムによって生成されました。これらは Gimp、ペイント、Photoshop などで読み取ることができますが、私のコードでは読み取れません。
どんな助けでも大歓迎です、ありがとう!
編集:元に戻されたコードを使用するのを忘れていました...私はそれを台無しにしてから、いくつかの悪いバージョンを投稿しました。それ以外の場合は機能するコードに関する元の問題を示すように改訂されました。問題をさらに説明すると、両方のディレクトリを変更して、testExpect2 フォルダーで expectedFiles[] のファイル リストを検索すると、正常に実行されます。また、System.out.println(actualFiles[i]
エラーが発生する前に正しいファイル名が出力されるため、正しいファイルが文字列配列に読み込まれていることがわかります。