2012-07-12 1 views
9

특정 코드를 사용하여 폴더에서 파일을 삭제했지만, InputStream 또는 2를 닫는 것을 잊었 기 때문에 매우 문제가됩니다. 내가 가지고있는 코드는 너무 커서 닫지 않은 모든 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 클래스에서 파일 삭제 작업을합니다.

코드는 그과 같습니다

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

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

스레드 "main"의 예외 java.io.IOException : 파일을 삭제할 수 없습니다 : C : \ ABC 문 최종 \ Statement0.RPT \t .apache.commons.io.FileUtils.forceDelete (FileUtils.java:1390) org.apache.commons.io.FileDeleteStrategy $ ForceFileDeleteStrategy.doDelete에서 \t (FileDeleteStrategy.java:151) org.apache.commons.io에서 \t .FileDeleteStrategy.delete (FileDeleteStrategy.java:94) \t at abcbankestatement.ABCBankEStatement.main (ABCBankEStatement.java : 502) 자바 결과 : 1 – ErrorNotFoundException

+0

만약 당신이'delete' 메소드를'deleteQuietly'로 대체한다면. 이 경우 ** 파일을 삭제할 수없는 경우 예외가 발생하지 않습니다 **. –

+3

내가 제거하고자하는 예외는 아니며 삭제 된 파일이 필요합니다. – ErrorNotFoundException

3

당신은 사용할 수 있습니다

FileUtils.deleteDirectory(File directory) 

아파치 코 몬즈 IO와

+3

아마도 'cleanDirectory()'를 사용하는 것이 디렉토리를 삭제하지 않는다고 말하기 때문에 더 좋을 것입니다. 그러나, 나는 "깨끗한"것이 무엇을 의미하는지 100 % 확신하지 못합니다. 나는 * 그것이 디렉토리 내용을 지우는 것을 의미한다고 가정하지만, 문서는 * 끔찍하다 *, 나는 확신 할 수 없다. – Timmmm

1

Apache Commons에서 :

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

이런 식으로 예외를 확인할 필요가 없습니다.

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 
    */ 

당신이 종속 필요를 사용하려면 :

메이븐 :

<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; 
}