我有这个Java类
package com.cf.utils;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.UUID;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import com.cf.CoreFaction;
import com.cf.faction.Faction;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.relauncher.Side;
public class FactionUtils {
public static boolean saveFaction(Faction f) {
if (Utils.isServer()) {
JSONObject obj = new JSONObject();
obj.put("Name", f.getName());
obj.put("Owner", f.getOwner().toString());
JSONArray members = new JSONArray();
for (UUID u : f.getMembers()) {
members.add(u.toString());
}
obj.put("Members", members);
File dir = new File(DimensionManager.getCurrentSaveRootDirectory() + "/factions");
if (!dir.exists())
dir.mkdirs();
try (FileWriter file = new FileWriter(
DimensionManager.getCurrentSaveRootDirectory() + "/factions/" + f.getName() + ".json")) {
file.write(obj.toJSONString());
file.close();
return true;
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
public static void deleteFaction(Faction f) {
if (Utils.isServer()) {
File file = new File(DimensionManager.getCurrentSaveRootDirectory() + "/factions/" + f.getName() + ".json");
if (file.exists()) {
if(file.delete()) { //THIS RETURNS FALSE
for (UUID p : f.getMembers()) {
Utils.sendMessage(p, Utils.getTranslation("faction.disbanded", TextFormatting.RED));
}
} else
Utils.sendMessage(f.getOwner(), Utils.getTranslation("faction.disband.error", TextFormatting.RED));
} else
System.out.println("Can't find the file");
}
}
public static Faction getFaction(UUID player) {
for (Faction f : getAllFactions()) {
if (f.getMembers().contains(player))
return f;
}
return null;
}
public static Faction getFaction(String name) {
for (Faction f : getAllFactions()) {
if (f.getName().equalsIgnoreCase(name))
return f;
}
return null;
}
public static ArrayList<Faction> getAllFactions() {
ArrayList<Faction> list = new ArrayList<Faction>();
if (Utils.isServer()) {
File dir = new File(DimensionManager.getCurrentSaveRootDirectory() + "/factions");
if (!dir.exists())
return list;
File[] factions = dir.listFiles();
for (File f : factions) {
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader(f));
JSONObject jsonObject = (JSONObject) obj;
JSONArray members = (JSONArray) jsonObject.get("Members");
Faction faction = new Faction((String) jsonObject.get("Name"),
UUID.fromString((String) jsonObject.get("Owner")));
ArrayList<UUID> ids = new ArrayList<UUID>();
for (int i = 0; i < members.size(); i++) {
ids.add(UUID.fromString(members.get(i).toString()));
}
faction.setMembers(ids);
list.add(faction);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return list;
}
}
当我调用方法deleteFaction时,我想删除一个特定文件,但是尽管file.exists()返回true,file.delete()返回false,我无法弄清楚原因。那么为什么我指向的文件无法删除?
答案 0 :(得分:0)
处理本地或网络上任何类型的i / o可能出现的错误一直是一种很好的设计实践
尝试在delete()
中捕获以下异常: -
try {
Files.delete(file.toPath());
} catch (NoSuchFileException x) {
System.err.format("%s: no such" + " file or directory%n", file.getAbsolutePath());
} catch (DirectoryNotEmptyException x) {
System.err.format("%s not empty%n", file.getAbsolutePath());
} catch (IOException x) {
// File permission problems are caught here.
System.err.println(x);
}
答案 1 :(得分:0)
答案 2 :(得分:0)
/**
* Deletes the file or directory denoted by this abstract pathname. If
* this pathname denotes a directory, then the directory must be empty in
* order to be deleted.
*
* @return <code>true</code> if and only if the file or directory is
* successfully deleted; <code>false</code> otherwise
*
* @throws SecurityException
* If a security manager exists and its <code>{@link
* java.lang.SecurityManager#checkDelete}</code> method denies
* delete access to the file
*/
您确定您的进程具有删除权限吗?尝试抓住SecurityException