运行java jar文件和path来使用它的文件。 (Windows 7和Windows 2008服务器)

我开发了一个小的Java应用程序,并将其导出到jar文件(forms为eclipse)。 在这个应用程序中,我使用XML文件名来读取input数据:

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(); } } 

当我运行jar文件时,我把任务文件与jar放在同一个文件夹中。 一切工作正常在Windows 7下。虽然当我在Windows 2008服务器上做同样的事情,我得到:

 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) 

哪里错了? 什么检查在Windows 2008服务器下运行这个?

PS

  • 在我的Win 7 java版本“1.8.0_45”
  • win 2008服务器java版本“1.8.0_60”(通过RDP客户端运行)

如果你的文件在你的jar文件夹中,那么使用Classloader来加载你的文件。

像下面一样

 InputStream in = this.getClass().getClassLoader().getResourceAsStream(fileName); 

代替

 decoder = new XMLDecoder(new BufferedInputStream( new FileInputStream(INPUT_FILE_NAME))); 

你可以使用fileInputStream是你正在加载文件的外部。

检查这个解决方案是否适合你。