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