Java 当文件位于Mac上的/Applications/Foobar.app中时,FileNotFound异常

Java 当文件位于Mac上的/Applications/Foobar.app中时,FileNotFound异常,java,Java,摘要-此代码: File f = new File("dbFile.dat"); f.getAbsolutePath(); 返回: /Applications/dbFile.dat 问题是我的应用程序的资源(例如3d party JAR)位于“Applications/Foobar.app/…”中 如何在没有硬编码的情况下获取我的安装文件夹的路径? 详细信息: 我正在使用3d party library,我需要为其提供文件名: ls = new LookupService("dbFile.d

摘要-此代码:

File f = new File("dbFile.dat");
f.getAbsolutePath();
返回:

/Applications/dbFile.dat
问题是我的应用程序的资源(例如3d party JAR)位于“Applications/Foobar.app/…”中

如何在没有硬编码的情况下获取我的安装文件夹的路径?

详细信息

我正在使用3d party library,我需要为其提供文件名:

ls = new LookupService("dbFile.dat");
分发时,此文件将放在我的安装文件夹的根目录中,紧挨着可执行文件—在Windows上非常有效

但是,在Mac上,我收到一个FNF异常,因为库没有在正确的位置搜索:

java.io.FileNotFoundException:dbFile.dat(系统找不到指定的文件)
位于java.io.RandomAccessFile.open(本机方法)
位于java.io.RandomAccessFile。(未知源)
...
我发现“/Applications/foobar.app/../dbFile.dat”路径的“foobar.app/../dbFile.dat”部分是在Ant构建文件中定义的,因此可能不会像我最初认为的那样在安装时由用户更改,因此我使用:

String pathToUse = PlatformDetector.IsMacOS() ? "/Applications/foobar.app/.../dbFile.dat" : "dbFile.dat";     
我发现“/Applications/foobar.app/../dbFile.dat”路径的“foobar.app/../dbFile.dat”部分是在Ant构建文件中定义的,因此可能不会像我最初认为的那样在安装时由用户更改,因此我使用:

String pathToUse = PlatformDetector.IsMacOS() ? "/Applications/foobar.app/.../dbFile.dat" : "dbFile.dat";     
试试这个:

URL myClass = MyClass.class.getResource("MyClass.class");
System.out.println(myClass.getPath());
这将打印出如下内容:

file:/home/mike/test.jar!/MyClass.class
您可以从中解析出您需要的内容。

尝试以下方法:

URL myClass = MyClass.class.getResource("MyClass.class");
System.out.println(myClass.getPath());
这将打印出如下内容:

file:/home/mike/test.jar!/MyClass.class

您可以从中解析出所需内容。

该文件是与应用程序一起打包和部署的资源文件吗?那么你应该使用类加载器来加载它。我不能这么做。我使用的库只接受一个字符串参数,然后使用该参数访问文件。可能您正在查找:file f=new file(System.getProperty(“user.dir”),“dbFile.dat”)?当然,必须在启动时正确设置当前工作目录。该文件是与应用程序一起打包和部署的资源文件吗?那么你应该使用类加载器来加载它。我不能这么做。我使用的库只接受一个字符串参数,然后使用该参数访问文件。可能您正在查找:file f=new file(System.getProperty(“user.dir”),“dbFile.dat”)?当然,当前工作目录必须在启动时正确设置。字符串“Applications”可能已本地化。谢谢,我将检查此项并发回-一切正常。字符串已翻译,但路径相同。字符串“应用程序”可能已本地化。谢谢,我将检查此项并发回-一切正常。字符串已转换,但路径相同。