JAR中的Java资源访问

时间:2014-11-18 13:34:42

标签: java maven jar resources

我正在尝试访问包含我的类的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中。

Outside JAR

然而,它在罐子里面不起作用。

UFM-Reckoning-0.0.0-alpha.0.jar
├── nl
|   └── joshuaslik
|       └── UFMReckoning
|           └── App.class
├── META-INF
|   └── MANIFEST.MF
└── file
    └── test.txt

Inside JAR

可以看到它尝试访问的文件是:file:/D:/Joshua/Git/Coding/UFM-Reckoning/build/UFM-Reckoning-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进行编译。

1 个答案:

答案 0 :(得分:0)

您是否尝试过classloader.getResourceAsStream()方法?