2012-07-12 45 views
9

Tôi đã sử dụng một đoạn mã cụ thể để xóa tệp khỏi một thư mục nhưng nó đang tỏ ra rất có vấn đề vì có thể tôi đã quên đóng một InputStream hoặc hai. Mã tôi có quá lớn đến mức tôi không thể thấy tất cả các Inputstream mà tôi chưa đóng. Có cách xóa tệp cho dù có một InputStream mở hay không?Buộc xóa tất cả các tệp khỏi một thư mục

Đây là đoạn mã tôi đang sử dụng;

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

Tôi đã chỉnh sửa mã. Phiên bản này hoạt động.

+1

tôi muốn đề nghị rằng câu trả lời ngắn gọn là không. Bạn nên chăm sóc bạn tốt hơn. – MadProgrammer

+0

Sau đó, tôi nên nói rằng tôi đã đi qua mỗi Inpustream Có trong mã và tôi đã đóng toàn bộ rất nhiều trong số họ Nhưng tôi vẫn có cùng một lỗi – ErrorNotFoundException

+0

2 suy nghĩ. Một số, một số nơi đang nắm giữ một tập tin mở &/hoặc có một vấn đề cấp phép – MadProgrammer

Trả lời

15

Không có phiên bản InputStream nào trong đoạn mã được cung cấp.

Để không viết nhiều mã IO chưa được kiểm tra, vui lòng xem dự án apache.commons.io. Đặc biệt là ở lớp FileDeleteStrategy, cho các thao tác xóa tệp.

Mã của bạn có thể trông như thế:

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

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

Ngoại lệ trong chủ đề "chính" java.io.IOException: Không thể xóa tệp: C: \ ABC Báo cáo cuối cùng \ Statement0.RPT \t tại tổ chức .apache.commons.io.FileUtils.forceDelete (FileUtils.java:1390) \t tại org.apache.commons.io.FileDeleteStrategy $ ForceFileDeleteStrategy.doDelete (FileDeleteStrategy.java:151) \t tại org.apache.commons.io .FileDeleteStrategy.delete (FileDeleteStrategy.java:94) \t tại abcbankestatement.ABCBankEStatement.main (ABCBankEStatement.java: 502) Kết quả Java: 1 – ErrorNotFoundException

+0

nếu bạn thay thế phương thức 'delete' bằng' deleteQuietly'. Trong trường hợp này ** nếu không thể xóa một tập tin, sẽ không có ngoại lệ nào được ném **. –

+3

Nó không phải là trường hợp ngoại lệ tôi muốn thoát khỏi, tôi cần các tập tin đã bị xóa. – ErrorNotFoundException

3

Bạn có thể sử dụng:

FileUtils.deleteDirectory(File directory) 

từ Apache Commons

+3

Có lẽ tốt hơn nên sử dụng 'cleanDirectory()' vì nó nói nó không xóa thư mục. Tuy nhiên, tôi không chắc chắn 100% "sạch" nghĩa là gì. I * giả sử * nó có nghĩa là nó xóa nội dung thư mục, nhưng tài liệu là * khủng khiếp *, vì vậy tôi không thể chắc chắn. – Timmmm

1

Với Apache Commons IO:

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

Không cần kiểm tra ngoại lệ theo cách này.

0

Sử dụng:

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

Documents:

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

Để sử dụng nó, bạn cần có một sự phụ thuộc:

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

Vui lòng thêm một số tài liệu/giải thích. –

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; 
} 
Các vấn đề liên quan