创建 .jar 和 FileNotFoundException

creating .jar and FileNotFoundException

BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
Scanner sc = new Scanner(reader);

我的代码在 ide 中有效,我什至在项目文件的所有文件夹中都有这个 file.txt。我正在将项目导出到 3 个不同的 ides(netbeans、intellij idea、eclipse)中的 jar,然后我 运行 jar 文件但是我得到这个错误(双击不幸的是,jar 对我不起作用,所以我在 cmd 上使用 java -jar 到 运行);

Exception in thread "main" java.io.FileNotFoundException: file.txt (the system cannot find the file specified)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileReader.<init>(Unknown Source)

如果我在代码中给出文件的完整路径,它会起作用,但我会将项目发送给其他人,这样文件夹就会被更改,当我尝试像 InputStream 等解决方案时。我得到 nullpointerexception。

在您的 jar 附近创建一个 "files" 文件夹,并将您的文件放入其中。试试这个代码块:

String filePath = System.getProperty("user.dir")
        + File.separator
        + "files"
        + File.separator + "file.txt";
try {
    BufferedReader reader = new BufferedReader(new FileReader(filePath));
    Scanner sc = new Scanner(reader);
} catch (Exception e) {
    e.printStackTrace();
}

正在使用 getResourceAsStream。

InputStream inputStream = Main.class.getResourceAsStream("/komsu.txt");
InputStreamReader iss = new InputStreamReader(inputStream);

BufferedReader reader = new BufferedReader(iss);
Scanner sc = new Scanner(reader);

这里Main.class的主词是我的class名字,你可以像YourClassName.class那样做,或者直接getClass()方法而不是Main.class如果你处理静态关键字。