Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行JavaJAR文件及其使用的文件路径。(Windows 7和Windows 2008服务器)_Java_Windows_Jar_Path - Fatal编程技术网

运行JavaJAR文件及其使用的文件路径。(Windows 7和Windows 2008服务器)

运行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

我开发了一个小型java应用程序,并将其导出到jar文件(表单eclipse)。在此应用程序中,我使用xml文件名从以下位置读取输入数据:

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客户端运行)

如果您的文件在jar文件夹中,则使用Classloader加载您的文件

如下

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。