从与.jar文件位于同一文件夹的文件中读取

shi*_*juo 16 java jar file

有没有办法从与.jar文件位于同一文件夹的文件中读取?我正在尝试创建一个java程序,当我上交我的作业时必须从文件中读取.我转过来后,我不知道文件或程序将保存在哪里,所以我不认为我可以对保存文件的目录进行编码.这可能吗?问题是我必须将文件上传到CSX主机服务器,这是一个Linux服务器并从那里运行它.如果我没有在文件之前放置路径,它只搜索其当前文件夹位置?

use*_*421 22

您可以通过以下方式获取包含任何特定类的JAR文件的位置:

URL url = thisClass.getProtectionDomain().getCodeSource().getLocation();
Run Code Online (Sandbox Code Playgroud)

从那里可以很容易地将URL重新激活到所需的文件.


afs*_*tos 17

如注释中所述,仅当您从jar所在的目录运行命令时,此方法才有效.

(在桌面应用程序的上下文中)
要访问位于当前目录中的文件jar,您path的文件前面应该有一个点.例:

String path = "./properties.txt";
FileInputStream fis = new FileInputStream(path);
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
// Read the file contents...
Run Code Online (Sandbox Code Playgroud)

在此示例中,有一个文本文件properties.txt在与该目录相同的目录中调用jar.
该文件将由包含在中的程序读取jar.

编辑:你说文件名不会改变,这个答案适用,因为你事先知道名字,当然,如果你喜欢硬编码它.

  • 这是一个比我更清洁的解决方案,但它不能处理所有情况.有时一个当前目录(.)与包含应用程序jar的目录不同.假设你的jar被称为app.jar并且在一个名为target的目录中; 如果评分者要从目标目录中键入"java -jar app.jar",那么您的解决方案将起作用.但是,如果评分者要在app dir之外的某个级别运行java命令,例如"java -jar ./target/app.jar",那么您的解决方案将在目标目录之外查找输入文件,因此无法找到它. (8认同)
  • 在文件名的前面添加"./"完全没有任何结果."JAR的当前目录"与".jar"的"相同文件夹"不同.-1 (2认同)