1

私はicefacesを使用して、Webアプリの相対パスにファイルをアップロードして(mywebapp/audio)います。次に、ファイルがアップロードされた後、次のようにファイルの名前を変更して拡張子を保存します。

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

ファイルがアップロードされた後、次のようにUIボタンからファイルを削除したい場合があります。

try {

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

ファイルパスは正しく、例外はありませんが、ファイルは削除されません(java 6 btwを使用しています)。この問題を修正する方法を教えてください。

更新:次の便利な方法を使用して、ファイルが開かれていることを確認できます。ファイルを閉じる方法はありますか?

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.";
    }
}
4

1 に答える 1

1

ファイルが開いている場合は、2つの解決策があります。

  • このファイルで開いているプログラムのストリームがあります。Windowsでは問題があることに注意してください。Unixでは、ストリームが開いていてもファイルを削除できます。

  • このファイルを使用する他のプロセスがあります。したがって、この場合、Javaからは何もできません。

ログには、権限の問題である可能性があることも示されていますが、十分な権限がありますか?

Files#delete(Path path)(jdk7)を使用して、問題の詳細を確認することもできます。

于 2012-07-08T14:28:34.573 に答える