运行JavaJAR文件及其使用的文件路径。(Windows 7和Windows 2008服务器)
我开发了一个小型java应用程序,并将其导出到jar文件(表单eclipse)。在此应用程序中,我使用xml文件名从以下位置读取输入数据:运行JavaJAR文件及其使用的文件路径。(Windows 7和Windows 2008服务器),java,windows,jar,path,Java,Windows,Jar,Path,我开发了一个小型java应用程序,并将其导出到jar文件(表单eclipse)。在此应用程序中,我使用xml文件名从以下位置读取输入数据: private static final String INPUT_FILE_NAME = "./tasks.xml"; ............ //read input tasks queue XMLDecoder decoder = null; try { decoder = new XMLDecoder(n
private static final String INPUT_FILE_NAME = "./tasks.xml";
............
//read input tasks queue
XMLDecoder decoder = null;
try {
decoder = new XMLDecoder(new BufferedInputStream(
new FileInputStream(INPUT_FILE_NAME)));
searchTasksQueue = (BlockingQueue<SearchTask>) decoder.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (decoder != null) {
decoder.close();
}
}
private static final String INPUT_FILE_NAME=“./tasks.xml”;
............
//读取输入任务队列
XMLDecoder=null;
试一试{
解码器=新的XMLDecoder(新的BufferedInputStream(
新文件输入流(输入文件名));
searchTasksQueue=(BlockingQueue)解码器。readObject();
}捕获(例外e){
e、 printStackTrace();
}最后{
if(解码器!=null){
close();
}
}
当我运行jar文件时,我将任务文件放在和jar相同的文件夹中。
一切都在Windows7下正常工作。但当我在windows 2008 server下执行相同操作时,我得到:
C:\Users\Administrator>java -jar c:\scraper\scraper.jar
java.io.FileNotFoundException: .\tasks.xml (The system cannot find the file spec
ified)
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 bmw.scraper.Starter.main(Starter.java:40)
C:\Users\Administrator>java-jar C:\scraper\scraper.jar
java.io.FileNotFoundException:。\tasks.xml(系统找不到文件规范
(化)
位于java.io.FileInputStream.open0(本机方法)
位于java.io.FileInputStream.open(未知源代码)
位于java.io.FileInputStream。(未知源)
位于java.io.FileInputStream。(未知源)
在bmw.scraper.Starter.main(Starter.java:40)
错误在哪里?要在Windows 2008 server下运行此操作,需要检查什么
PS
- 在我的Win 7 java版本“1.8.0_45”上
- win 2008服务器java版本“1.8.0_60”(通过RDP客户端运行)
InputStream in = this.getClass().getClassLoader().getResourceAsStream(fileName);
而不是
decoder = new XMLDecoder(new BufferedInputStream(
new FileInputStream(INPUT_FILE_NAME)));
当您从外部加载文件时,可以使用fileInputStream
检查此解决方案是否适用于您。它有效。一段时间后会做更多的测试。你知道为什么我的帖子中提到的解决方案不能在Win2008服务器下工作,而不能在Windows7下工作吗?那太好了。如果这个答案对你有帮助,请不要忘记接受答案。是的,这很奇怪,如果它在Win7上工作,那么它也应该在win server上工作。但我在我的win7机器上做了同样的事情(正如你在问题中提到的),我得到了上面的错误,所以不确定它是如何为你工作的。但一般来说,无论何时从jar加载文件,都应该使用classloader。