是否应关闭 YamlConfiguration 对象



我一直在研究一个需要存储大量数据的插件。我将其存储在我在网上找到的自定义配置文件中,该文件的工作方式与默认配置基本相同。

遇到的问题是我不确定如何实际关闭文件,或者我什至需要关闭,因为我对 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 获取配置的当前状态并将其复制到配置文件中。

相关内容

  • 没有找到相关文章