我一直在研究一个需要存储大量数据的插件。我将其存储在我在网上找到的自定义配置文件中,该文件的工作方式与默认配置基本相同。
我遇到的问题是我不确定如何实际关闭文件,或者我什至需要关闭,因为我对 yaml 配置知之甚少。我使用的模板的代码如下。
我也很好奇关于将来应该如何存储大量数据的建议。
public class CustomConfig {
//store name of file to load/edit
private final String fileName;
//store plugin, to get file directory
private final JavaPlugin plugin;
//store actual hard disk file location
private File configFile;
//store ram file copy location
private FileConfiguration fileConfiguration;
//constructor taking a plugin and filename
public CustomConfig(JavaPlugin plugin, String fileName) {
//ensure plugin exists to get folder path
if (plugin == null)
throw new IllegalArgumentException("plugin cannot be null");
//set this classes plugin variable to the one passed to this method
this.plugin = plugin;
//get name of file to load/edit
this.fileName = fileName;
//get directory/folder of file to load/edit
File dataFolder = plugin.getDataFolder();
if (dataFolder == null)
throw new IllegalStateException();
//load config file from hard disk
this.configFile = new File(plugin.getDataFolder(), fileName);
reloadConfig();
}
public void reloadConfig() {
//load memory file from the hard copy
fileConfiguration = YamlConfiguration.loadConfiguration(configFile);
// Look for defaults in the jar
File configFile = new File(plugin.getDataFolder(), fileName);
if (configFile != null) {
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(configFile);
fileConfiguration.setDefaults(defConfig);
}
}
public FileConfiguration getConfig() {
if (fileConfiguration == null) {
this.reloadConfig();
}
return fileConfiguration;
}
public void saveConfig() {
if (fileConfiguration == null || configFile == null) {
return;
} else {
try {
getConfig().save(configFile);
} catch (IOException ex) {
plugin.getLogger().log(Level.SEVERE, "Could not save config to " + configFile, ex);
}
}
}
public void saveDefaultConfig() {
if (!configFile.exists()) {
this.plugin.saveResource(fileName, false);
}
}
}
No.您不必关闭YamlConfiguration
对象。
虽然默认配置(JavaPlugin.getConfig()
)绑定到插件的生命周期,但当任何其他Java对象被释放时,即当垃圾回收器确定代码中没有更多指向它们的引用时,自定义配置被释放。
您不需要关闭配置。这不是BufferedWriter
.配置将所有数据保留在内存中,直到服务器关闭。这意味着,如果您在启用插件期间更改了配置中的某些内容,则需要使用 reloadConfig()
方法。使用 FileConfiguration#set(String, Object)
方法后,您需要做的唯一清理是使用 FileConfiguration#saveConfig()
告诉 Bukkit 获取配置的当前状态并将其复制到配置文件中。