1

I am using icefaces to upload files to relative path in my web app (mywebapp/audio), then after the file is getting uploaded I rename it to save its extension as follows:

public static File changeExtToWav(FileInfo fileInfo,
            StringBuffer originalFileName) {
        log.debug("changeExtToWav");
        int mid = fileInfo.getFile().getName().lastIndexOf(".");
        String fileName = fileInfo.getFile().getName().substring(0, mid);
        originalFileName.append(fileName);
        log.debug("originalFileName: " + originalFileName);
        String newFileName = fileName + "_" + new Date().getTime() + "."
                + "wav";
        File newFile = new File(fileInfo.getFile().getParent() + "/"
                + newFileName);
        log.debug("newFileName: " + newFile.getName());
        fileInfo.getFile().renameTo(newFile);
        return newFile;
    }

after the file is getting uploaded, sometimes I want to delete it from UI button as follows:

try {

            File fileToDelete = new File(filePath); // correct file path
            log.debug("file exists: " + fileToDelete.exists()); // true
            fileToDelete.delete();
        } catch (Exception e) {
            e.printStackTrace();
        }

the file path is correct, and I get no exceptions, but the file is not deleted (I am using java 6 btw). please advise how to fix this issue.

UPDATE: using the following useful method, I can get that the file is opened, any ideas how to close it ?

public String getReasonForFileDeletionFailureInPlainEnglish(File file) {
    try {
        if (!file.exists())
            return "It doesn't exist in the first place.";
        else if (file.isDirectory() && file.list().length > 0)
            return "It's a directory and it's not empty.";
        else
            return "Somebody else has it open, we don't have write permissions, or somebody stole my disk.";
    } catch (SecurityException e) {
        return "We're sandboxed and don't have filesystem access.";
    }
}
Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
Mahmoud Saleh
  • 33,303
  • 119
  • 337
  • 498

1 Answers1

1

Well if the file is open, then there is two solutions :

  • You have a stream in your program open on this file. Note that afaik it's a problem on Windows, with Unix I can delete a File even if a stream is opened on it.

  • You have an other process using this file. So in this case you can't do anything from Java.

In the log it tells also that it can be a permission problem, are you sure you have enough privileges?

You can also use Files#delete(Path path) (jdk7) to have more details about the issue.

alain.janinm
  • 19,951
  • 10
  • 65
  • 112