JAR中的Java资源访问

JAR中的Java资源访问,java,maven,jar,resources,Java,Maven,Jar,Resources,我试图访问jar中的资源,jar中也包含我的类 这个网站上有一些问题说明了如何解决,但没有一个是有效的 我的代码是: package nl.joshuaslik.UFMReckoning; import java.io.File; import java.io.IOException; import java.util.Scanner; public class App { public static void main(String[] args) { Syste

我试图访问jar中的资源,jar中也包含我的类

这个网站上有一些问题说明了如何解决,但没有一个是有效的

我的代码是:

package nl.joshuaslik.UFMReckoning;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class App {

    public static void main(String[] args) {
        System.out.println(getFile("file/test.txt"));
    }

    private static String getFile(String fileName) {
        StringBuilder result = new StringBuilder("");

        // Get file from resources folder
        ClassLoader classLoader = App.class.getClassLoader();
        File file = new File(classLoader.getResource(fileName).getFile());
        System.out.println(classLoader.getResource(fileName).getPath());

        try (Scanner scanner = new Scanner(file)) {
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                result.append(line).append("\n");
            }
            scanner.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return result.toString();
    }

}
我的目录布局如下:

classes
├── nl
|   └── joshuaslik
|       └── UFMReckoning
|           └── App.class
└── file
    └── test.txt
这段代码在不在jar中时运行良好

然而,当它在罐子里时,它将不工作

UFM-Reckoning-0.0.0-alpha.0.jar
├── nl
|   └── joshuaslik
|       └── UFMReckoning
|           └── App.class
├── META-INF
|   └── MANIFEST.MF
└── file
    └── test.txt
可以看到,它试图访问的文件是:file:/D:/Joshua/Git/Coding/UFM-counting/build/UFM-counting-0.0.0-alpha.0.jar/file/test.txt,这对我来说似乎是一条奇怪的路径,因为!在它中,这在Windows上是不允许的

MANIFEST.MF的内容

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: Joshua
Created-By: Apache Maven 3.2.3
Build-Jdk: 1.8.0_25
Main-Class: nl.joshuaslik.UFMReckoning.App
有人知道怎么修吗


我正在使用Windows 7 64位和Maven进行编译。

您尝试过classloader.getResourceAsStream方法吗?

我不知道为什么getResourceAsStream上次不能工作,但现在可以了。但是,这种方法不适用于图像,对吗?因此,同样的问题也会出现,无法找到该文件。示例中的getResource与getResourceAsStream不同