Не удается удалить все файлы в каталоге в сервлете в NetBeans - PullRequest
0 голосов
/ 04 января 2012

Я не могу удалить все файлы в каталоге. Это приложение сервлета в 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 голосов
/ 04 января 2012

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

2 голосов
/ 04 января 2012

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

Существует множество возможных причин для этого как внутри, так и вне вашего собственного кода.Я предполагаю, что вы управляете этими файлами исключительно внутри своего собственного кода.Вам необходимо убедиться, что вы вызываете метод 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 останется.

...