1

SMTPサーバーからメールをダウンロードするBeanがあります。メールを読んだ後、添付ファイルをサーバーに保存します。添付ファイルを読むには、次のコードを使用します。

File f = new File("\\attachments\\" + attachment.getFileName());
f.mkdirs();
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
fos.write(bytes);
fos.close();

FileOutputStreamの作成時にFileNotFoundExceptionが発生しましたが、その理由がわかりません。役立つ場合は、GlassFishでNetBeansを使用し、ローカルマシンのデバッグでテストを行います。

4

1 に答える 1

6

あなたがするとき

f.mkdirs();

ファイルの名前でディレクトリを作成します(つまり、ディレクトリ "attachments"を作成するだけでなく、添付ファイルのファイル名の名前でサブディレクトリも作成します)。それで

f.createNewFile();

ファイルは(作成したばかりのディレクトリの形式で)すでに存在するため、何もしません。ファイルがすでに存在することを通知するためにfalseを返します。

次に、これは失敗します。

FileOutputStream fos = new FileOutputStream(f);

ディレクトリで出力ストリームを開こうとしています。システムはディレクトリへの書き込みを許可しないため、失敗します。

結論は次のとおりです。

  • mkdirs()あなたが思っていることをしません。
  • への呼び出しの戻り値を確認する必要がありますcreateNewFile()

それを機能させる最も簡単な方法は、行を次のように置き換えることです。

f.getParentFile().mkdirs();
于 2013-03-04T14:55:00.437 に答える