我是Java的新手,面临桌面应用程序的问题。我必须写入数据并将其输出为“data.txt”(意味着不将文件写入固定位置)并让用户下载此文件。我在互联网上搜索了很多,但没有得到任何适当的解决方案。欢迎提出所有建议。
注意:我使用的是NetBeans IDE 7.0.1
答案 0 :(得分:3)
将数据保存在流中,然后显示FileChooser对话框,让用户决定将文件保存到的位置。然后将流写入选定的文件。
有关文件选择器的更多信息,请参阅此处:http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html
答案 1 :(得分:0)
在服务器上创建文件之后,您可以执行与向客户端发送图像文件类似的操作(在我的情况下,它是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);
}
}
这是它使用的进口:
import org.apache.commons.codec.binary.Base64OutputStream;
import org.apache.commons.io.IOUtils;
在客户端(在您的桌面应用中),您将使用相同的IOUtils从Base64对其进行解码,然后您可以将其存储在任何您想要的位置。 实际上@Matten提供了一个简洁的解决方案(+1)。
答案 2 :(得分:0)
我有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());
}