我是 Java 的新手,面临桌面应用程序的问题。我必须写入数据并将其输出为“data.txt”(意味着不将文件写入固定位置)并让用户下载此文件。我在互联网上搜索了很多,但没有得到任何适当的解决方案。欢迎所有建议。
注意:我使用的是 NetBeans IDE 7.0.1
我是 Java 的新手,面临桌面应用程序的问题。我必须写入数据并将其输出为“data.txt”(意味着不将文件写入固定位置)并让用户下载此文件。我在互联网上搜索了很多,但没有得到任何适当的解决方案。欢迎所有建议。
注意:我使用的是 NetBeans IDE 7.0.1
将数据保存在流中,然后显示 FileChooser 对话框,让用户决定将文件保存到何处。然后将流写入所选文件。
可以在此处阅读有关文件选择器的更多信息:http: //docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html
一旦你在服务器上创建了你的文件,你就可以做类似的事情来向我的客户发送图像文件(在我的情况下,它是一个JSP
但它实际上并不重要你的客户在哪里):
/**
* Writes file with a given path to the response.
* @param pathToFile
* @param response
* @throws IOException if there was some problem writing the file.
*/
public static void writeFile(String pathToFile, ServletResponse response) throws IOException {
try(InputStream is = new FileInputStream(pathToFile);
OutputStream out = new Base64OutputStream(response.getOutputStream());){
IOUtils.copy(is, out);
}
}
这些是它使用的导入:
导入 org.apache.commons.codec.binary.Base64OutputStream;
导入 org.apache.commons.io.IOUtils;
在客户端(在您的桌面应用程序中),您将使用相同的IOUtils从Base64对其进行解码,然后您可以将其存储在您想要的任何地方。对于这一点,@Matten 实际上给出了一个简洁的解决方案(+1)。
我有例子,JFileChooser
但很抱歉仍然没有明白你对下载的看法。
BufferedOutputStream buff = null;
BufferedReader reader = null;
JFileChooser fileChooser;
File file;
fileChooser.showSaveDialog(this);
file = new File(fileChooser.getSelectedFile().toString());
file.createNewFile();
reader = new BufferedReader(new StringReader("String text"));
buff = new BufferedOutputStream(new FileOutputStream(file));
String str;
while ((str = reader.readLine()) != null) {
buff.write(str.getBytes());
buff.write("\r\n".getBytes());
}