2012-01-04 1 views
0

Я не могу удалить все файлы в каталоге. Это приложение сервлета в NetBeans.Не удается удалить все файлы в каталоге в сервлет в NetBeans

public void updateRootFile(String directorypath, String appID, String[] appName) throws IOException { 
    FileInputStream finStream =null; 
    BufferedReader br = null; 
    OutputStreamWriter outStream = null; 
    FileInputStream fins = null; 

    String strLine="";  

    try {  
     File[] listOfFiles = fileLists("D:\\root\\"); 
     for (int i = 0; i < listOfFiles.length; i++) { 
      String rootFiles = listOfFiles[i].getName(); 

      File rootFile = new File("D:/root/"+rootFiles);   
      File copyFile = new File("D:/root1/"+rootFiles); 

      finStream = new FileInputStream(rootFile); 

      //String propertyStr = "root.label." + appID; 
      //properties.load(new InputStreamReader(finStream, Charset.forName("UTF-8"))); 
      //String getAppName = properties.getProperty("root.label." + appID); 
      //String toUtf =new String(appName[i].getBytes("iso-8859-1"), "UTF-8") ; 
      //String oldChar = propertyStr + "=" + getAppName; 
      //String newChar = propertyStr + "=" + toUtf; 

      fins = new FileInputStream(rootFile); 

      br = new BufferedReader(new InputStreamReader(fins, "UTF-8")); 
      outStream = new OutputStreamWriter(new FileOutputStream(copyFile), "UTF-8"); 
      while ((strLine = br.readLine()) != null) {    
       strLine = strLine.replace("hai", "haai"); 
       outStream.write(strLine); 
       outStream.write("\r\n"); 
      } 
      outStream.flush(); 
      outStream.close(); 
      br.close(); 
      fins.close(); 
      finStream.close();     
     }     
    } catch (Exception e) { 
     System.out.println("Excpetion : " + e); 
    } 

    File rootFileone = new File("D:/root");  
    boolean check= deleteDir(rootFileone);  
} 


public static boolean deleteDir(File dir) { 
    if (dir.isDirectory()) { 
     String[] children = dir.list(); 
     for (int i=1; i<children.length; i++) { 
      boolean success = deleteDir(new File(dir, children[i])); 
      //if (!success) { 
      // return false; 
      // } 
     } 
    } 
    // The directory is now empty so delete it 
    return dir.delete(); 
} 


private File[] fileLists(String directorypath) { 
    folder = new File(directorypath); 
    listOfFiles = folder.listFiles(); 
    return listOfFiles; 
} 

У меня есть 29 .properties файлов в папке. Но в этом цикле всегда по крайней мере один файл остается не удаленным. Поэтому я не могу удалить папку.

+2

В чем проблема? –

+2

@Michael Petrotta: В чем проблема с моим вопросом? Ответьте – 1355

+3

Где вы на самом деле удаляете свои файлы? –

ответ

2

Файл не может быть удален, если он был открыт чем-то другим.

Для этого существует множество возможных причин, как внутри, так и снаружи вашего собственного кода. Я предполагаю, что вы управляете этими файлами исключительно внутри своего собственного кода. Вам необходимо убедиться, что вы вызываете метод close() на InputStream/OutputStream или Reader/Writer в блоке finally блока try, где вы читаете/записываете файл.

Итак, убедитесь, что вы будете придерживаться следующей Java IO идиома создания, использования и закрытия InputStream/OutputStream и Reader/Writer ресурсы.

Writer writer = null; 

try { 
    writer = new FileWriter(file); // Just an example. Can be any Writer. 
    writer.write(something); 
    // ... 
} finally { 
    if (writer != null) try { writer.close(); } catch (IOException ignore) {} 
} 

Или, когда вы уже на Java 7:

try (Writer writer = new FileWriter(file)) { 
    writer.write(something); 
    // ... 
} 

Он будет автоматически закрывать AutoCloseable ресурс, когда try блок остается.

+0

Я пробовал. Но никаких изменений не произошло. Я добавлю полный код в свой вопрос. – 1355

2

Как об использовании org.apache.commons.io.FileUtils.deleteDirectory() для удаления каталога рекурсивно?