在我的客户端/服务器应用程序中,我需要从客户端向服务器发送一些文件(.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 中工作,并在导出时停止工作。
最佳答案
此代码正在查找类路径中的文件。如果那里没有文件,它会抛出 FNF。当您在 Eclipse 中工作时,您的文件可能位于 src 中,因此它被复制到 bin 中。将文件存档到 jar 后,您可以通过 getResource
或 getResourceAsStream
InputStream inputFile = this.getClass().getClassLoader().getResourceAsStream(sourceFile.getName())
或使用 URL。例如
URL url = new URL("jar:file:/c:/path/to/my.jar!/myfile.txt");
JarURLConnection conn = (JarURLConnection)url.openConnection();
InputStream inputFile = conn.getInputStream();
关于java - 导出 .jar 时出现 FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12025689/