【问题标题】:Java write data to a file and download it?Java 将数据写入文件并下载?
【发布时间】:2012-05-10 08:36:14
【问题描述】:

我是 Java 新手,面临桌面应用程序的问题。我必须写入数据并将其输出为“data.txt”(意味着不将文件写入固定位置)并让用户下载此文件。我在互联网上搜索了很多,但没有得到任何适当的解决方案。欢迎所有建议。

注意:我使用的是 NetBeans IDE 7.0.1

【问题讨论】:

  • "downloading" ==> 你是在写网页应用还是桌面应用?对于后一种情况,“保存文件”对话框是合适的。
  • 感谢@Matten 的快速回复。我正在编写桌面应用程序,我必须在运行时将内容写入文件中(而不是在任何物理位置),然后必须显示一个保存(下载)对话框。
  • @dirtyhandsphp:你是说你构建了一个简单的记事本但有下载功能?
  • @Zaz 根据您的示例,我必须提到我只是想保存文件的文件路径。但在我的情况下,用户会在运行时将文件保存在他/她想要的位置,就像我们从 Internet 下载任何文件时所做的那样。

标签: java desktop-application filechooser


【解决方案1】:

将数据保存在流中,然后显示 FileChooser 对话框,让用户决定将文件保存到何处。然后将流写入选定的文件。

更多关于文件选择器的信息可以在这里阅读:http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html

【讨论】:

  • 根据您的回答,我认为我必须使用浏览按钮并要求用户按照链接的建议输入文件位置,并且内容将写入该特定文件。但是,如果我可以给用户一个下载文件的选项,那就太好了。还是仅在 Web 应用程序中才有可能?
  • 您可以从您的桌面应用程序从 Web 服务器下载等,这不是问题,您只需要逐步考虑即可。首先向服务器询问它可以提供哪些文件(准备下载),您可以按照您喜欢的方式将其呈现给用户,然后当用户选择时,您会按照人们的建议使用文件选择器来显示存储它的位置和文件.
  • 桌面应用程序中没有“下载”,因为文件内容已经驻留在客户端计算机上。因此,文件选择器的作用与网站上的下载对话框相同,无需通过网络连接发送数据。
  • @Boro 和 Matten:感谢你们俩。 Matten 我接受你的回答。
【解决方案2】:

一旦你在服务器上创建了你的文件,你就可以做类似的事情来向我的客户发送图像文件(在我的例子中是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)。

【讨论】:

    【解决方案3】:

    我有 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());
    }
    

    【讨论】:

    • 我只想要一个与您尝试通过 Internet 下载任何内容时出现的相同的对话框。
    猜你喜欢
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    相关资源
    最近更新 更多