文件路径在NetBeans中工作,但不在内置的JAR文件中

时间:2014-01-11 14:35:57

标签: resources classloader

我正在尝试将文件从类路径复制到用户指定的位置。但是,在netbeans中运行程序时,文件路径正常工作并且文件被复制但是当我构建一个jar文件并尝试相同时,它不会找到源文件。

URL url = getClass().getResource("utils/mount");
File file = new File(url.getPath());
this.copyEachFile(url.getPath(), "C:\\Users\\Nikhil\\Desktop\\" + mount); //this function takes in source path of file and copies it to destination path.

当我跟踪源路径时,我得到了

/C:/Users/Nikhil/Documents/NetBeansProjects/Aroma-Installer/build/classes/aroma/installer/utils/mount

在netbeans中,然后在jar中

/C:/Users/Nikhil/Documents/NetBeansProjects/Aroma-Installer/dist/Aroma-Installer.jar!/aroma/installer/utils/mount

当我在netbeans中运行程序时,文件成功复制但在运行jar时,它表示源不存在。 问题在哪里?

1 个答案:

答案 0 :(得分:0)

好的,我创建了一个函数,并按如下方式调用它。

this.copyFileFromJar("utils/mount", "C:\\Users\\Nikhil\\Desktop\\mount");

功能定义如下。

public void copyFileFromJar(String source, String destination) throws IOException{
    File dest = new File(destination);
    if(!dest.exists()){
        dest.createNewFile();
}
    InputStream in = null;
    OutputStream out = null;
    try{
        in = this.getClass().getResourceAsStream(source); //Important step, it returns InputStream which can be manipulated as per need.
        out = new FileOutputStream(dest);
        byte[] buf = new byte[1024];
        int len;
        while((len = in.read(buf)) > 0){
            out.write(buf, 0, len);
    }
        JOptionPane.showMessageDialog(null, "File Successfully copied at" + dest.getAbsolutePath());
        System.out.println("File Writing......" + dest.getName());
    }
    finally{
        in.close();
        out.close();
    }
}

现在我可以将文件从jar文件复制到用户指定的位置。 希望这可以帮助任何正在寻找同类问题的人。