catch file.exists()SecurityException java

时间:2014-01-12 00:07:59

标签: java

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

那么,我应该抓住异常还是不必要?

try {
    if (!configFile.exists()) {
        return;
    }
} 
catch (SecurityException e) {
    plugin.getLogger().log(Level.SEVERE, configFile.getPath().concat(" read permission denied."), e);
}

2 个答案:

答案 0 :(得分:2)

捕获所有异常的一般规则是“在可以采取行动的级别捕获它们”。 SecurityExceptionRuntimeException,因此您可以选择不捕获它(因此将其传播),而不要求您的方法显式抛出SecurityException。那么,如果你得到一份,你的计划是什么?通常,您可以在这里做的唯一事情是使用回退路径(因为您要求的那个被禁止),或者向您的用户显示错误。您选择了哪种选择,以及您捕获异常的调用堆栈中的哪个级别取决于您。

答案 1 :(得分:0)

我认为你的问题是你应该抓住它而不是你是怎么做的(这就是你的要求):

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

如果你真的不在乎,你不需要抓住它。