0

だから、ファイルを削除しようとしていますが、できません...これが私のコードです:

private static final File file = new File("data.dat");

public static void recreate() {
    try {
        if (file.exists()) {
            file.delete();
        }

        if (file.exists()) {
            throw new RuntimeException("Huh, what now?");
        }

        file.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

疑われないように、例外がスローされます。

Exception in thread "main" java.lang.RuntimeException: Huh, what now?

何か助けはありますか?私は何を間違っていますか (それはおそらくただのダープです...)?

4

2 に答える 2

0

そのファイルに対する書き込み権限がない可能性があります。File#canWriteそのファイルを削除しようとする前に、そのファイルの書き込み権限を確認する方法は次のとおりです。

if (!file.canWrite()) {
    throw new RuntimeException("Sorry I don't have right permissions!");
}
// now you can try to delete it
if (file.exists()) {
            file.delete();
}

編集:親ディレクトリに対する読み取り/書き込み/実行権限も必要です。これらのチェックも追加できます。

if (!file.exists())
    throw new RuntimeException("file doesn't exist!");

File parent = file.getParentFile();

if (!parent.canRead() || !parent.canWrite() || !parent.canExecute())
    throw new RuntimeException("Sorry I don't have right permissions on dir!");

if (!file.canWrite())
    throw new RuntimeException("Sorry I don't have write permission on file!");

// now you can try to delete it
if (file.delete()) // check return value
    System.out.println("file deleted!!!");
 else
    throw new RuntimeException("Failed to delete the file");
于 2013-08-25T13:21:44.017 に答える
0

あなたが尋ねたとおりではないことはわかっていますが、とにかくファイルを再作成するので、どうですか:

public static void recreate() {
    try (FileOutputStream fout = new FileOutputStream(file)) {
        // empty
    } catch (IOException e) {
         throw new RuntimeException(e);
    }
}
于 2013-08-25T14:27:10.210 に答える