2012-07-12 21 views
9

特定のコードを使用してフォルダーからファイルを削除していますが、InputStreamを閉じることを忘れていた可能性があります。私が持っているコードは非常に大きいので、私が閉じていないすべてのInputstreamを見ることができません。開いているInputStreamがあるかどうかに関係なく、ファイルを削除する方法はありますか?フォルダー内のすべてのファイルを強制的に削除する

これは私が使っているコードの一部です。

File fin = new File("C:/ABC Statements final/"); 
    File[] finlist = fin.listFiles();  
    for (int n = 0; n < finlist.length; n++) { 
     if (finlist[n].isFile()) { 
     System.gc(); 
     Thread.sleep(2000); 
      finlist[n].delete(); 
     } 
    }   

私はコードを編集しました。このバージョンは機能します。

+1

私は短い答えはノーであることを示唆していると思います。あなたは川をよく世話するべきです。 – MadProgrammer

+0

それから私はすべてのInpustreamを通過したと言わなければなりませんコードにありますが、私はそれらの多くを閉じましたが、私はまだ同じエラーを受けました – ErrorNotFoundException

+0

2つの考え。いくつかのもの、ファイルが開いている状態、アクセス許可の問題があります – MadProgrammer

答えて

15

提供されたコードのチャンクにはInputStreamインスタンスはありません。

テストされていないIOコードをたくさん書きたくない場合は、apache.commons.ioプロジェクトをご覧ください。特にFileDeleteStrategyクラスでは、ファイルの削除操作に使用されます。

あなたのコードは、そのようになります。

FileUtils.deleteDirectory(File directory) 

Apache Commons

+0

スレッド "main"の例外java.io.IOException:ファイルを削除できません:C:\ ABCステートメントfinal \ Statement0.RPT \t org.apache.commons.ioで.apache.commons.io.FileUtils.forceDelete(FileUtils.java:1390)org.apache.commons.io.FileDeleteStrategy $ ForceFileDeleteStrategy.doDelete(FileDeleteStrategy.java:151)で \t \t .FileDeleteStrategy.delete(FileDeleteStrategy.java:94) \t at abcbankestatement.ABCBankEStatement.main(ABCBankEStatement。java:502) Javaの結果:1 – ErrorNotFoundException

+0

'delete'メソッドを' deleteQuietly'メソッドに置き換えた場合、この場合**ファイルを削除できなかった場合、例外はスローされません**。 –

+3

それは私が取り除きたい例外ではない、私はファイルを削除する必要があります。 – ErrorNotFoundException

3

File dir = ... 
FileUtils.deleteQuietly(dir); 
dir.mkdirs(); 

このように例外をチェックする必要はありません。

+3

おそらく 'cleanDirectory()'はディレクトリを削除しないと言いますので、それを使う方が良いでしょう。しかし、私は「クリーン」が何を意味するのか100%は確信していません。私は*それはディレクトリの内容を削除することを意味しますが、ドキュメントは*ひどい*ですので、私は確信することはできません。 – Timmmm

1

からのApache CommonsのIOで:あなたが使用することができます

File fin = new File("C:/ABC Statements final/"); 

for (File file : fin.listFiles()) { 
    FileDeleteStrategy.FORCE.delete(file); 
} 
0

用途:

import org.apache.commons.io.FileUtils; 
    FileUtils.cleanDirectory(fin); 

ドキュメント:

/** 
    * Clean a directory without deleting it. 
    * 
    * @param directory directory to clean 
    * @throws IOException in case cleaning is unsuccessful 
    */ 

あなたが依存関係を必要とする、それを使用するには:

のMaven:

<dependency> 
    <groupId>commons-io</groupId> 
    <artifactId>commons-io</artifactId> 
    <version>2.6</version> 
</dependency> 

のGradle:

compile 'commons-io:commons-io:2.6' 
0
public void removeDir() 
{ 
try 
{ 
    File dir = new File((System.getProperty("user.dir")+"/ReportFolderToMail"+timeStamp)); 
    if (dir.isDirectory()) 
    { 
     File[] files = dir.listFiles(); 
     if (files != null && files.length > 0) 
     { 
      for (File aFile : files) 
      { 
       System.gc(); 
       Thread.sleep(2000); 
       FileDeleteStrategy.FORCE.delete(aFile); 
       System.out.println("delet file" +aFile); 
      } 
     } 
     dir.delete(); 
     System.out.println("delet" +dir); 
    } 
    else 
    { 
     dir.delete(); 
    } 
} 
catch(Exception e) 
{ 
    e.printStackTrace(); 
} 
+1

ドキュメント/説明を追加してください。 –

0
public boolean removeDir() 
{ 
try 
{ 
    //destFile = new File((System.getProperty("user.dir")+"/FileName")) 
    // checks if the directory has any file 
    File dir = destFile; 
    if (dir.isDirectory()) 
    { 
     File[] files = dir.listFiles(); 
     if (files != null && files.length > 0) 
     { 
      for (File aFile : files) 
      { 
       System.gc(); 
       Thread.sleep(2000); 
       FileDeleteStrategy.FORCE.delete(aFile); 
       System.out.println("delet file" +aFile); 
      } 
     } 
     dir.delete(); 
     System.out.println("delet" +dir); 
    } 
    else 
    { 
     dir.delete(); 
    } 
} 
catch(Exception e) 
{ 
    logger.log(LogStatus.FATAL, "Exception Occured While Deleting Folder : " +e); 
} 
return true; 
} 
関連する問題