【问题标题】:Get location from where the Java code is executed获取执行 Java 代码的位置
【发布时间】:2010-04-21 10:48:12
【问题描述】:

我有一个保存大量数据的 Swing Java 应用程序(例如,您可以想到一个游戏及其保存)。这些数据存储在文件中而不是数据库中。

我想将此文件保存在我的应用程序的安装文件(.jar 文件)附近。一些用户(如我)习惯于在操作系统的默认应用程序文件夹变大时删除它,我不希望它们松动这样他们的数据。

任何想法如何轻松做到这一点?如何从正在执行该 .jar 文件的程序中获取 .jar 文件的文件夹?或者我如何将文件直接输出到某个包中?如何动态创建包(jar 内的文件夹)?或者有没有一种简单的方法以其他格式分发 Java 应用程序,然后是 .jar,然后将生成的数据存储在安装(子)文件夹中?

感谢阅读

【问题讨论】:

    标签: java file jar persistence


    【解决方案1】:

    我想把这些文件放在附近 我的安装文件(.jar 文件) 应用程序。一些用户(比如我)是 用于删除默认应用程序 涉及到大的操作系统文件夹 我不想让他们失去他们的 以这种方式获取数据。

    这(以及对普通用户帐户没有对应用程序目录的写访问权限的多用户系统的概念)是用户数据应保存在用户主目录中而不是靠近应用程序安装文件夹的任何地方的原因。

    【讨论】:

    • 那么,我如何将数据保存到用户的主目录或 Java 中的平台默认位置?
    • @drasto: System.getProperty("user.home") 将返回目录路径。
    【解决方案2】:

    代码

    URL folderURL = ClassLoader.getSystemResource(".");
    

    将提供一个 URL,指向搜索资源的第一个位置,例如您当前正在执行的类文件。

    【讨论】:

      【解决方案3】:

      这是一个例子:

      package jartest;
      
      import java.io.File;
      import java.net.URL;
      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
      
      public class Main {
          private static final Pattern JARURL = Pattern.compile("jar:file:(.*)!.*");
      
          public static void main(String[] args) {
              try {
                  URL url = Main.class.getResource("Main.class");
                  Matcher matcher = JARURL.matcher(url.toString());
                  if (matcher.matches()) {
                      File file = new File(matcher.group(1));
                      File dir = file.getParentFile();
                      System.out.println(dir);
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
      

      【讨论】:

        【解决方案4】:

        获取 jar 文件的位置

        首先创建一个文件夹(比如我的文件夹)并将文件放入其中

        考虑以下函数

        public String path()
        {
        URL url1 = getClass().getResource("");
        String ur=url1.toString();
        ur=ur.substring(9);
        String truepath[]=ur.split("myjar.jar!");
        truepath[0]=truepath[0]+"myfolder/";
        truepath[0]=truepath[0].replaceAll("%20"," ");
        return truepath[0];
        }//This method will work on Windows and Linux as well.
        //You can alternatively use the following line to get the path of your jar file
        //classname.class.getProtectionDomain().getCodeSource().getLocation().getPath();
        

        假设您的用户将 jar 文件放在 D:\Test\dist

        然后 path() 将返回 /D:/Test/dist/myfolder/

        现在您可以将“myfolder”放在您的 jar 文件所在的文件夹中

        这样您就可以访问 myfolder 中的文件

        分发步骤

        http://www.jrsoftware.org/isdl.php 下载 Inno Setup Compiler 并运行它

        选择“使用脚本向导创建新脚本文件”选项 填写您的申请详情

        接下来浏览您的 jar 文件(选择打开对话框的所有文件选项以查看您的 jar 文件)

        当然,将您的“我的文件夹”添加到其他应用程序文件部分(添加文件夹)

        按照剩余的说明进行操作

        你来了。

        【讨论】:

          猜你喜欢
          • 2016-05-12
          • 1970-01-01
          • 2016-01-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-22
          • 2017-12-06
          • 1970-01-01
          相关资源
          最近更新 更多