Hoconosc
Hoconosc

Reputation: 406

FileNotFoundException when exporting the signed JAR of the Applet in Eclipse

In my client/server app I need to send some files (.txt, .doc, etc.) from the client to the server. When I run my code in Eclipse it works, but when I export the signed JAR of the Applet, it doesn't.

It throws a FileNotFoundException.

I tried saving a file in several ways without success.

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

Alternative code used:

FileInputStream inputFile = new FileInputStream(sourceFile);

Or

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

Or

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

The original code and every alternative work in Eclipse stoped working when exported.

Upvotes: 1

Views: 1593

Answers (3)

Roman C
Roman C

Reputation: 1

This code is looking a file on the classpath. If there's no a file there it throws FNF. When you work in Eclipse your file is probably in the src, so it's copied to bin. After you archived a file to the jar you can access it either getResource or getResourceAsStream

InputStream inputFile = this.getClass().getClassLoader().getResourceAsStream(sourceFile.getName())

or using URL. For example

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

Upvotes: 1

Hoconosc
Hoconosc

Reputation: 406

I found the solution after becoming mad. Windows didn't have privileges to open the files. So run your browser with Administrator privileges and it will work.

Upvotes: 0

poitroae
poitroae

Reputation: 21377

You need to copy your resources manually into the jar.

To do so, use 7zip or winRar or anything else, right click and "open archive". Then drag-and-drop your resouces (e.g. png's etc.) to the appropriate folder (usually root).

Upvotes: 0

Related Questions