【问题标题】:Java - Create a file in the same directory as the .jar if it doesn't already existJava - 如果 .jar 尚不存在,则在与 .jar 相同的目录中创建一个文件
【发布时间】:2016-07-06 06:21:17
【问题描述】:

我真的被困在两个部分。 A) 我需要程序找到 RUNNING JAR FILE 的目录,并检查同一目录中是否有一个名为“credits.txt”的文件。 B) 如果不是,它将在 SAME DIRECTORY 中创建文件。

主要问题是无法获取我的文件的路径。

假设正在运行的 jar 文件位于名为“Server”的文件夹中,程序会将名称“Server”保存在字符串中,然后检查该字符串中是否存在文件。如果是,则什么也不做,否则创建文件。

@Override
public void onEnable(){
    getLogger().info(ChatColor.GREEN + "Credits has been enabled!");
    File file = new File("Credits.txt");

    //HERE I NEED THE PROGRAM TO CHECK WHAT DIRECTORY THE RUNNING JAR FILE IS FROM
    if (file.exists(//IN THE SAME DIRECTORY AS THE RUNNING JAR FILE)){
        getLogger().info(ChatColor.DARK_GREEN + "Credits File Exists");

    }else{
        getLogger().info(ChatColor.DARK_RED + "Credits File Doesn't Exist!");
        //HERE IT NEEDS TO CREATE THE FILE IN THE SAME DIRECTORY OF THE JAR FILE "credits.txt"

    }

【问题讨论】:

  • 你的困难是什么?请注意,当前工作目录(它在其中查找没有完整路径的文件)不一定是 jar 文件所在的位置。
  • 不,这不是一件“简单的事情”,事实上 Java 似乎试图阻止你这样做。我不记得如何找到 Jar 目录的详细信息,但它确实涉及一些扭曲。我似乎记得需要使用一些“安全”类型的类或方法。搜索找到 jar 文件的路径以获取详细信息。
  • 啊,here it is。不是“安全”而是“受保护”。 getClass().getProtectionDomain().getCodeSource().getLocation()
  • 但是话虽如此,这可能不是您想要做的,而您的问题实际上可能是XY Problem,您在最佳解决方案时询问“如何解决此代码问题”是完全使用不同的方法。考虑告诉我们您正在尝试解决的总体问题,而不是您当前尝试解决的方式。
  • @HovercraftFullOfEels 如果我没有正确解释我遇到的问题,我很抱歉。我已经更新了第一篇文章

标签: java


【解决方案1】:

如果您正在制作 Bukkit 插件,您可以在主类中使用 getDataFolder()。然后你可以检查它是否存在,如果不存在则创建它。

public void onEnable(){
    getLogger().info(ChatColor.GREEN + "Credits has been enabled!");

    File pluginDirectory = getDataFolder(); //getting the data folder
    if(!pluginDirectory.exists()){
        pluginDirectory.mkdir(); //Creating the plugin data folder if it doesn't exist.
    }

    File file = new File(pluginDirectory+File.seperator+"Credits.txt"); //Credits.txt inside the plugin directory

    if (file.exists()){ //Checking if Credits.txt exists
        getLogger().info(ChatColor.DARK_GREEN + "Credits File Exists");

    }else{
        getLogger().info(ChatColor.DARK_RED + "Credits File Doesn't Exist!");

        file.createNewFile(); //You probably need to create it too
    }
}

如果您想创建它来存储设置,请考虑使用getConfig() 而不是自己创建文件。这要容易得多。

【讨论】:

  • 谢谢!一旦我弄清楚到底发生了什么,我可能会再次发表评论,但我想我现在明白了:)
  • 谢谢,现在在服务器启动和重新加载时正在创建一个文件夹,这很棒,但是这个文件夹总是在服务器启动时被覆盖,它每次都会创建一个新文件夹
  • 基本上,这一行: if(!pluginDirectory.exists()) 总是正确的,所以每次似乎都会创建一个新文件夹......并且控制台打印“信用文件不存在"
猜你喜欢
  • 2018-06-16
  • 2014-01-03
  • 1970-01-01
  • 2017-02-19
  • 2015-05-10
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多