2017-07-13 9 views
1

ディレクトリ内のファイルを削除しようとしましたが、jsfマネージドBeanで失敗します。 助けてもらえますか?どうもありがとうございます。以下は ストリームが閉じていても削除を実行中のファイル

は私のXHMTLコードです

以下
#{incomingCheckList.checkImage(result.imageURL)} 

<p:graphicImage value="#{incomingCheckList.image}" stream="false" styleClass="checkListImageSize"/> 

#{incomingCheckList.closeStream()} 

私が読んで、ストリームを閉じた後、私のマネージドBeanコードの下

private StreamedContent image; 
public void checkImage(String attachment) throws IOException { 


    FileInputStream in = new FileInputStream(new File(attachment)); 

    image = new DefaultStreamedContent(new FileInputStream(new File(attachment))); 

} 

public void closeStream() throws IOException { 
    try { 
     image.getStream().close(); 
     System.out.println("closed"); 
    } catch (Exception e) { 
     System.out.println("exception"); 
    } 

} 

は私の削除コード

for (int i = 0; i < allCheckList.size(); i++) { 
      if (allCheckList.get(i).isDeleteOrNot()) { 

       File file = new File(fileUploadPath + "/incomingCheckList/" + allCheckList.get(i).getComponentPhoto()); 


       try { 
        Files.delete(file.toPath()); 

       } catch (Exception e) { 
        System.out.println(e.getMessage()); 
       } 
      } 
     } 

されている、I私のイメージファイルを削除しようとします。 しかし、それは私のエラーがリソースが使用されているため、イメージファイルを削除することができないと言った。 助けてください。 おかげであなたは次の操作を行い、あなたのpublic void checkImage(String attachment)方法で

答えて

1

  1. あなたはその後、完全にそれがかつて存在し忘れに進み、新たなFile
  2. のうち新しいFileInputStreamを作成します。
  3. 次に、あなたがあなたのイメージを作成するためにnew DefaultStreamedContent()に渡す新しいFileのうち全く新しいFileInputStreamを作成します。

その後、その画像の入力ストリームのみを閉じます。

あなたはそれがガベージコレクション取得し、どうなる場合保証はときあるいはのようがないだろうだけ近いときに作成された最初のFileInputStream

あなたはこのミスを犯したという事実は、あなたが使用されていないローカル変数inについての警告を受けていないことを意味します。これは、警告を有効にせずにプログラムしようとしていることを意味します。それをしないでください。できるだけ多くの警告を最初に有効にしない限り、コードが決して警告を生成しないことを確認しない限り、非常に遠くに行くつもりはありません。

+0

Oh..i see ...最後にそれは正常に削除できます〜!!!私の間違いのためのあなたの助言のおかげで...ありがとう.. –

+0

の間に、 "それはあなたがプログラムしようとしていることを意味します警告を有効にしないでください。 警告を有効にする方法を教えてもらえますか? –

+0

どのIDEを使用していますか? –

関連する問題