java - 在导出到 jar 文件的文件路径中使用加号 (+)

标签 java jar

标题可能不太清楚,但我会尽力解释。

我正在尝试访问具有类似于 /net/blm50+hmm/synlist/ 的路径的文件,当我不导出到 jar 文件并仅从以下位置运行它时,该文件工作正常在我的 IDE (eclipse) 中。但是,如果我在导出后尝试运行它,则会出现空指针异常。如果我将路径重命名为不包含加号,它运行时不会出现问题。我可以逃避加号或类似的东西吗?

你可能会问为什么我不直接重命名文件夹,原因是懒惰。有很多文件夹需要重命名,我宁愿避免它。

希望能帮到你

鲑鱼

编辑:

我有一个 FileUtils 类,用于访问应用程序 jar 中的资源:

public class FileUtils {

public static InputStream getInputStreamForResource(String resourcePath) throws IOException {
    // Try to get the file from the application jar first.
    InputStream result = FileUtils.class.getResourceAsStream(resourcePath);

    return result;
}

public static Scanner getScanner(String resourcePath) throws IOException {
    return new Scanner(getInputStreamForResource(resourcePath));
}

}

如果我调用 getScanner("/net/blm50+hmm/synlist/"); 我会得到空指针异常。

堆栈跟踪是(对 getScanner 的调用发生在 NetworkCollection.fromSynapseList 中):

java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:61)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
    at java.util.Scanner.<init>(Scanner.java:590)
    at persistence.FileUtils.getScanner(FileUtils.java:34)
    at calculation.NetworkCollection.fromSynapseList(NetworkCollection.java:89)
    at processes.JobDispatcher.doInBackground(JobDispatcher.java:136)
    at processes.JobDispatcher.doInBackground(JobDispatcher.java:1)
    at javax.swing.SwingWorker$1.call(SwingWorker.java:277)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at javax.swing.SwingWorker.run(SwingWorker.java:316)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)

最佳答案

要使该代码正常工作,jar 文件必须可供加载 FileUtils 的 ClassLoader 使用(或者简单地说,它应该位于类路径上)。

关于java - 在导出到 jar 文件的文件路径中使用加号 (+),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3182043/

相关文章:

java - 写输出 : Too many methods: 77742; max is 65536. 的麻烦按包:

java - -server -XX :+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler时使用哪个编译器

Java:gradle 构建失败 bootRepackage(在创建 jar 时)

java - 如何使用 Netbeans 和 Maven 将 Web 片段打包到 jar 中

java - 如何创建 Java 独立应用程序

java - Bazel:带有 sqlite.db 的 Java 资源文件夹

java - 获取ObjectOutputStream/ObjectInputStream的进度

java - 看不懂这个Map.entry参数

jar - 充气城堡 : How to get bcpkix-jdk15on-1. 47.jar 带有调试信息

java - 为什么 PriorityQueue.toString 返回错误的元素顺序?