Java 正在jar外部读取文件

Java 正在jar外部读取文件,java,jar,Java,Jar,所以我在一个文件夹中有一个.jar文件,在那个文件夹中有一些输入文件。但是,程序会在主文件夹中查找该文件(向上几层)。很明显,我想从它所在的文件夹中读取它,但我不想明确说明我的文件夹的文件路径,因为其他人不一定会将他们的.jar文件放在同一位置 有没有一种方法可以直接读取jar文件之外的文件?如果没有,是否有一种方法可以在不硬编码文件路径的情况下执行此操作 编辑: 这是密码。它只是检查输入文件是否存在 package main; import java.io.File; import java.

所以我在一个文件夹中有一个.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:
我尝试在开始时添加带有“/”的相对引用,但这也不起作用。

只需在文件名之前使用.。

如果我没有错,您尝试访问与.jar文件位于同一文件夹中的文件

这可以使用相对URL轻松完成。相对URL指的是使用
新建文件(“./settings.txt”)
,它将在与正在运行的.jar文件相同的文件夹中搜索该文件。但是,您可以使用
“./settings.txt”
查找上一个文件夹中的文件


“/”
指的是同一个目录
。/“
指的是上一个目录。

JAR文件不必从文件系统快速加载,从文件系统加载时可以是应用程序启动的任何目录-因此相对路径不是一个好主意。JAR文件不仅可以来自文件系统,还可以来自其他类型的源,因为它可以是流。我认为最好的方法是,如果有一个系统参数,您可以在启动JAR文件时传递目录或工作目录。

如果您可以依赖文件系统上的.JAR文件,您可以通过

new File(run.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
如果存在
SecurityManager
且不允许,则可能导致
SecurityException

另一种可能是使用

(new File(System.getProperty("java.class.path"))).getAbsolutePath();

然后可以使用
getParentFile()

获取jar文件的文件夹。您是指文件系统中的任何路径吗?是的。所以在我的桌面上,我有一个包含jar文件和输入文件的文件夹。但是如果文件夹也在其他地方,我希望程序能够工作。我想你已经硬编码了路径。你能在这里发布代码吗?我在上面添加了代码。这不是真的。因为工作目录可能与JAR的位置不同。即使在这之后,它也找不到文件。。。我不知道是怎么回事。我试过“./”和“./”等等。