所以我在一个文件夹中有一个.jar文件,我在该文件夹中有一些输入文件。但是,程序会在主文件夹中查找该文件(多个层次)。我希望它显然是从它所在的文件夹中读取它但我不想明确关于我的文件夹的文件路径,因为其他人不一定会把他们的.jar文件放在同一地点。
有没有办法直接在jar文件之外读取文件?如果没有,有没有办法在不对文件路径进行硬编码的情况下执行此操作?
编辑:
这是代码。它只是检查输入文件是否存在。
package main;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
/**
* Created by chris on 12/1/15.
* Control class that will be run when the jar is run.
*/
public class run {
public static void main(String[] args) throws Exception {
if (!(new File("settings.txt").exists())) {
start.run();
}
if (!(new File("api_key.txt").exists())) {
alert.display("Make your api_key.txt please.");
} else {
gatherData.run();
}
}
}
编辑2: 我尝试在开头用“./”添加相对引用,但这也不起作用。
答案 0 :(得分:1)
如果您可以依赖.jar文件在文件系统上,您可以通过
获取它的绝对路径new File(run.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
如果存在SecurityException
且不允许这样做,则可能会导致SecurityManager
。
另一种可能性是使用
(new File(System.getProperty("java.class.path"))).getAbsolutePath();
然后可以使用getParentFile()
答案 1 :(得分:0)
在文件名之前使用./。
答案 2 :(得分:0)
如果我没有错,您正试图访问与.jar文件相同的文件夹中的文件。
使用相对URL可以轻松完成此操作。通过相对URL,我的意思是使用
autoForm
,这将搜索与正在运行的.jar文件相同的文件夹中的文件。但是,您可以使用<template name="example">
{{#autoForm collection="Payments" id="insertPaymentForm" type="insert"}}
<fieldset>
<legend>Add a Payment Method</legend>
{{> afQuickField name='title'}}
{{> afQuickField name="card" type="select-radio" options=cardOptions }}
</fieldset>
<button type="submit" class="btn btn-primary">Insert</button>
{{/autoForm}}
</template>
查找文件夹中的文件。
new File("./settings.txt")
引用同一目录"../settings.txt"
引用一个目录。
答案 3 :(得分:0)
JAR文件不是从文件系统加载的,从文件系统加载时可以是应用程序从哪个目录开始 - 所以相对路径不是一个好主意。 JAR文件不仅可以来自其他类型的源FileSystem,因为它可以是流。我认为,如果有一个系统参数,你可以在启动JAR文件时传递目录或工作目录,这是最好的方法。