导出.jar时出现FileNotFoundException

时间:2012-08-19 10:06:02

标签: java jar applet inputstream filenotfoundexception

在我的客户端/服务器应用程序中,我需要从客户端向服务器发送一些文件(.txt.doc等)。当我在Eclipse中运行我的代码时,它可以工作,但是当我导出Applet的签名JAR时,它没有。它会抛出一个FileNotFoundException。我尝试以多种方式保存文件但没有成功。

public static boolean saveFile(File sourceFile) throws IOException {

    DirectoryChooserDialog dialog = new DirectoryChooserDialog();
    filePath = dialog.getDestinationFolder();
    if (filePath != null) {
        InputStream inputFile = ClassLoader.getSystemResourceAsStream(""+sourceFile);

        filePath += File.separator + sourceFile.getName();

        FileOutputStream outputFile = new FileOutputStream(filePath);

        int byteLetti = 0;
        while ((byteLetti = inputFile.read(buffer)) >= 0) {
            outputFile.write(buffer, 0, byteLetti);
            outputFile.flush();
        }

        inputFile.close();

        outputFile.close();

        return true;
    } else
        return false;
}

使用替代代码:

FileInputStream inputFile = new FileInputStream(sourceFile);

或者

InputStream inputFile = ClassLoader.class.getResourceAsStream(""+sourceFile);

InputStream inputFile = FileSaving.class.getResourceAsStream(""+sourceFile);

Eclipse中的原始代码和每个替代工作,并在导出时停止工作。

3 个答案:

答案 0 :(得分:1)

此代码正在查找类路径上的文件。如果那里没有文件,它会抛出FNF。当你在Eclipse中工作时,你的文件可能在src中,所以它被复制到bin。将文件存档到jar后,您可以getResourcegetResourceAsStream

访问该文件
InputStream inputFile = this.getClass().getClassLoader().getResourceAsStream(sourceFile.getName())

或使用网址。例如

URL url = new URL("jar:file:/c:/path/to/my.jar!/myfile.txt"); 
JarURLConnection conn = (JarURLConnection)url.openConnection();
InputStream inputFile = conn.getInputStream();

答案 1 :(得分:0)

您需要手动将资源复制到jar中。

为此,请使用7zip或winRar或其他任何内容,右键单击并“打开存档”。 然后将您的资源(例如png等)拖放到相应的文件夹(通常是根目录)。

答案 2 :(得分:0)

我生气后找到了解决方案。 Windows没有打开文件的权限。 因此,使用管理员权限运行浏览器,它将起作用。