catch file.exists()SecurityException java

catch file.exists()SecurityException java,java,Java,我对java相当陌生,在搜索了一些有关捕获file.exists()的SecurityException的信息后,我没有看到有人捕获它,因此我不确定是否应该捕获该异常。Eclipse对这两种方式都没有抱怨。这是一个服务器扩展插件,当别人运行它时,我无法控制。 下面是该类的代码: public class ChatChannels { private JavaPlugin plugin; private HashSet<ChatChannel> chatChannels

我对java相当陌生,在搜索了一些有关捕获file.exists()的SecurityException的信息后,我没有看到有人捕获它,因此我不确定是否应该捕获该异常。Eclipse对这两种方式都没有抱怨。这是一个服务器扩展插件,当别人运行它时,我无法控制。 下面是该类的代码:

public class ChatChannels {
    private JavaPlugin plugin;
    private HashSet<ChatChannel> chatChannels;
    private static ChatChannels instance;
    File configFile;
    FileConfiguration config;

    private ChatChannels(JavaPlugin plugin) {
        this.plugin = plugin;
        configFile = new File(plugin.getDataFolder().getPath()
                .concat(File.separator).concat("Data"), "channels.yml");
        chatChannels = new HashSet<ChatChannel>();
        config = YamlConfiguration.loadConfiguration(configFile);

        if (!configFile.exists()) {
            return;
        }

        for (String channelName : config.getStringList("channels")) {
            chatChannels.add(new ChatChannel(channelName));
        }
    }

    public static ChatChannels getInstance(JavaPlugin plugin) {
        if (instance == null) {
            instance = new ChatChannels(plugin);
        }
        return instance;
    }
}

我想你的问题是你是否应该抓住它,而不是你是如何做到的(这就是你要问的):

这完全取决于您的用例。如果您希望您的应用程序对引发的安全异常做出反应(例如…再次尝试或通知用户),那么您应该捕获它并做出相应的反应


如果你真的不在乎,你就不需要捕捉它。

捕捉所有异常的一般规则是“在你可以采取行动的级别捕捉它们”。
SecurityException
是一个
RuntimeException
,因此你可以选择不捕捉它(并因此让它传播)无需方法显式抛出
SecurityException
。那么,如果你得到一个,你的计划是什么?通常,您在这里只能使用回退路径(因为您询问的路径是禁止的),或者向您的用户显示错误。您选择哪个选项,以及在调用堆栈中捕获异常的级别取决于您。

这就清楚了,谢谢!因为路径应该始终具有读/写权限,所以我将禁用通道模块并警告用户。
try {
    if (!configFile.exists()) {
        return;
    }
} 
catch (SecurityException e) {
    plugin.getLogger().log(Level.SEVERE, configFile.getPath().concat(" read permission denied."), e);
}