【问题标题】:Java file automatically overwrites?Java文件自动覆盖?
【发布时间】:2014-03-31 17:19:25
【问题描述】:

我正在尝试仅在不存在旧版本时创建文件。

这就是我认为正在覆盖它的东西:

warningsFile = new File(plugin.getDataFolder(), "Warnings.yml");
warnings = YamlConfiguration.loadConfiguration(warningsFile);

这是在构造函数中,用于辅助类(不是主类)。每当重新加载服务器(这是针对服务器)时,它似乎都会执行新文件并覆盖。有没有更好的方法来解决这个问题?

【问题讨论】:

    标签: java file yaml


    【解决方案1】:
    warningsFile = new File(plugin.getDataFolder(), "Warnings.yml");
    
    if(!warningsFile.exists()) {
        try {
            warningsFile.createNewFile();
        }
        catch (Exception e) {
            Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.RED + "Couldn't create warnings.yml. Error: " + e.getMessage());
        }
    }
    
    warnings = YamlConfiguration.loadConfiguration(warningsFile);
    
    • 首先,我们实例化一个 File 实例。如果文件不存在, 我们尝试创建它。
    • 如果失败,我们会告诉控制台。
    • 最后,我们 从该文件加载 YAML 配置。

    我制作的这个视频可能会有所帮助:

    http://www.youtube.com/watch?feature=player_embedded&v=_Rntj7r8jTQ

    【讨论】:

    • 我最初只有 new File(); new File() 不会像您在上面所做的那样创建文件吗?
    • 没有。正如 Oracle 的 JavaDocs 所说,File 类是 an abstract representation of file and directory pathnames。您可以使用不存在的路径实例化File,它仍然可以工作。但是,如果您尝试listFiles() 一个文件夹并且该文件夹不存在,那么它显然不起作用。见docs.oracle.com/javase/6/docs/api/java/io/File.html
    【解决方案2】:

    (了解此服务器实现)

    您可以简单地调用:

    plugin.saveResource("warnings.yml", false);
    

    这将从您的 jarfile 中加载保存的 warnings.yml(您需要在其中放置一个),并且 false 指定不覆盖该文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-09
      • 2014-10-22
      • 2017-09-02
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多