标题可能不完全清楚,但我会尝试解释。在导出到jar文件的文件路径中使用加号(+)
我试图访问一个像/net/blm50+hmm/synlist/
这样的路径的文件,当我不导出到jar文件并在IDE(eclipse)中运行它时,它可以正常工作。但是,如果我在导出它时尝试运行它,则会收到空指针异常。如果我将路径重命名为没有加号,它将毫无问题地运行。我可以逃避加号或类似的东西吗?
你可能会问为什么我不只是重命名文件夹,其原因是懒惰。有很多文件夹要重新命名,我宁愿避免它。
我希望你能帮忙,
shalmon
编辑:
我有我使用的应用程序中的罐子访问资源类文件实用程序:
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/");
我得到nu指针异常。
堆栈跟踪是(调用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)
你可以发布你的代码和stacktrace的样本吗?点击“编辑”并将其粘贴到那里,预先设置4个空格以自动进行代码格式化 – OscarRyz 2010-07-05 20:46:56
如果您使用没有“+”的文件,会发生什么情况?我认为你应该得到相同的'NullPointerException' – OscarRyz 2010-07-05 21:00:42
如果我尝试访问没有“+”的文件,我没有任何例外。 – ppries 2010-07-05 21:03:07