【发布时间】:2012-06-16 17:35:47
【问题描述】:
我有一个可执行的 jar 文件,我希望它能够读取和写入与 .jar 文件位于同一目录的 txt 文件中的信息。我怎样才能做到这一点?如何获取可执行的 jar 文件 dir 路径。它只需要在windows平台上运行,它是一个桌面应用程序。
【问题讨论】:
标签: java executable-jar filepath text-files
我有一个可执行的 jar 文件,我希望它能够读取和写入与 .jar 文件位于同一目录的 txt 文件中的信息。我怎样才能做到这一点?如何获取可执行的 jar 文件 dir 路径。它只需要在windows平台上运行,它是一个桌面应用程序。
【问题讨论】:
标签: java executable-jar filepath text-files
创建新文件不需要指定完整路径,java默认会在当前工作目录创建新文件。
【讨论】:
我有一个可执行的 jar 文件,我希望它能够读取和写入与 .jar 文件位于同一目录的 txt 文件中的信息。
不要那样做!大多数操作系统制造商长期以来一直在说不要将应用程序和应用程序数据放在同一个地方。应用程序数据的最佳位置是user.home 的子目录。
例如
import java.io.File;
public class QuickTest {
public static void main(String[] args) {
String[] pkgPath = { "com", "our", "app" };
File f = new File(System.getProperty("user.home"));
File subDir = f;
for (String pkg : pkgPath) {
subDir = new File(subDir,pkg);
}
System.out.println(f.getAbsoluteFile());
System.out.println(subDir.getAbsoluteFile());
}
}
【讨论】:
Class.getProtectionDomain().getCodeSource().getLocation() 将返回包含您调用它的类的 JAR 的位置(如果它在 JAR 中)。
不过,另请参阅 Andrew Thompson 的回答。
【讨论】:
以下代码 sn-p 将为您完成此操作:
final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
用你的main类替换MyClass
生成的File 对象f 表示已执行的.jar 文件。
您可以使用此对象获取文件所在的目录并使用它来构建目录路径。
【讨论】: