FileWriter 写入 Java 中的用户桌面,而不是服务器桌面

FileWriter to write to user desktop in Java, rather than server desktop

作为搜索应用程序的一部分,我希望用户能够下载一份以 CSV 文件格式显示结果的报告。我有以下方法:

public void downloadCustomerResults(String customer) {
        String output = "";
        output += produceCustomerID(customer);
        output += produceCustomerAddress(customer);
        output += produceCustomerContactDetails(customer);
        output += produceOrderHeader(customer);
        output += producePayments(customer);

        //  Writes to server desktop, not user desktop.
        try {
            Writer fileWriter = new FileWriter("C:\Users\username\Desktop\SAR" + customer + "C.csv");
            fileWriter.write(output);
            fileWriter.flush();
            fileWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

这会将文件下载到机器 运行 服务器的桌面,而不是用户的桌面(通过 Tomcat 上的 JSP 访问应用程序)。我将如何更改文件路径字符串以将此下载到用户的桌面?还是我必须将文件传递给 JSP 以便用户通过浏览器下载?

谢谢。

简答:服务器无法访问客户端的文件系统。

更长的答案:您可以为客户端提供下载文件的服务(例如,通过 URI 访问的网络服务,如提到的@Kayaman),或者客户端为您提供写入文件的服务(例如远程文件系统、FTP 服务器等)。对于后者,可能 是提供特殊 java.nio.FileSystem 扩展的库。

您也可以在客户端提供一个应用程序运行来接收文件。然后此客户端应用程序将可以访问客户端的文件系统(当然,除非它没有访问权限)。

所以我找到的答案是使用 Java脚本包 FileSaver.js。 这接受从字符串创建的 blob,然后使用您选择的文件名将其保存到浏览器首选的下载文件夹中。

我设法将字符串从 Java 传递到 JavaScript,然后通过 .JSP 页面中的 FileSaver.js 传递它。