Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中导出为CSV/Excel_Java_Excel_Csv_Export - Fatal编程技术网

在Java中导出为CSV/Excel

在Java中导出为CSV/Excel,java,excel,csv,export,Java,Excel,Csv,Export,我正试图通过Java将数据导出到CSV文件中,我有一些代码来完成这项工作,但它似乎没有输出CSV文件。谁能告诉我怎么了?我想做的不是将文件保存在某个地方,而是将其直接导出到用户 编辑:以防不清楚,我不希望将文件保存在任何位置,但希望将其自动输出给用户,即用户单击“导出”并获得“运行/保存结果.csv”窗口,然后打开文件。目前该文件正在保存,因此我知道该方法似乎有效,与我希望的相反 public static void writeToCSV(List<Map> objectList)

我正试图通过Java将数据导出到CSV文件中,我有一些代码来完成这项工作,但它似乎没有输出CSV文件。谁能告诉我怎么了?我想做的不是将文件保存在某个地方,而是将其直接导出到用户

编辑:以防不清楚,我不希望将文件保存在任何位置,但希望将其自动输出给用户,即用户单击“导出”并获得“运行/保存结果.csv”窗口,然后打开文件。目前该文件正在保存,因此我知道该方法似乎有效,与我希望的相反

public static void writeToCSV(List<Map> objectList) {
    String CSV_SEPARATOR = ",";
    try {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream("results.csv"), "UTF-8"));
        for (Map objectDetails : objectList) {
            StringBuffer oneLine = new StringBuffer();
            Iterator it = objectDetails.values().iterator();

            while (it.hasNext()) {
                Object value = it.next();

                if(value !=null){
                    oneLine.append(value.toString());
                    }

                if (it.hasNext()) {
                    oneLine.append(CSV_SEPARATOR);
                }
            }
            bw.write(oneLine.toString());
            bw.newLine();
        }
        bw.flush();
        bw.close();
    } catch (UnsupportedEncodingException e) {
    } catch (FileNotFoundException e) {
    } catch (IOException e) {
    }
}
publicstaticvoidwritetocsv(List objectList){
字符串CSV_分隔符=“,”;
试一试{
BufferedWriter bw=新的BufferedWriter(新的OutputStreamWriter(
新文件输出流(“results.csv”),“UTF-8”);
用于(映射对象详细信息:对象列表){
StringBuffer单线=新的StringBuffer();
迭代器it=objectDetails.values().Iterator();
while(it.hasNext()){
对象值=it.next();
if(值!=null){
append(value.toString());
}
if(it.hasNext()){
oneLine.append(CSV_分隔符);
}
}
write(oneLine.toString());
换行符();
}
bw.flush();
bw.close();
}捕获(不支持的编码异常e){
}catch(filenotfounde异常){
}捕获(IOE异常){
}
}

我建议使用这样的框架。它还为您进行转义和引用。

如果您没有收到错误,请检查代码所在的目录。如果没有特定路径,您的文件将保存在那里

编辑:由于文件正在保存,并且希望自动打开,请使用

Runtime.getRuntime().exec("results.csv"); 
(对于Windows-在csv文件的默认应用程序中打开csv文件)


(对于Mac-在csv文件的默认应用程序中打开csv文件)

建议
HSSFWorkbook
轻松读取和写入excel文件。

为此,CSV阅读器需要读取程序的内存。这是一件有点复杂的事情。因此,将文件保存在临时文件夹中。这样做没有问题。

您的代码似乎没有问题。您确定它没有输出文件吗?尝试使用绝对文件路径,如
“c:\\temp\\results.csv”
。您将忽略所有捕获的异常。是否引发异常?嗯,经过进一步调查,我发现没有引发异常,但文件正在保存到硬盘。实际上,我更希望它自动打开,这样当点击“导出”按钮时,文件就会直接打开,如果你知道我的意思的话?我相信这是可能的,因为我以前做过,但我一辈子都记不起我是怎么做的。嗯,经过进一步调查,我发现没有抛出异常,但文件正在保存到硬盘。实际上,我更希望它自动打开,这样当点击“导出”按钮时,文件就会直接打开,如果你知道我的意思的话?我确信这是可能的,因为我以前做过,但我一辈子都记不起我是怎么做的。@WIOijwww请编辑这个问题,以反映您需要自动打开该文件。@WIOijwww您最初的帖子听起来好像根本没有写入该文件,并不是说它不是自动打开的。这真的是最好的方法吗?我认为Java是独立于平台的。exec()方法中的字符串是要运行的系统命令,即从特定操作系统的命令行运行以打开文件的内容。
Runtime.getRuntime().exec("open results.csv");