Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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 将数据写入excel(CSV)文件_Java_Servlets - Fatal编程技术网

Java 将数据写入excel(CSV)文件

Java 将数据写入excel(CSV)文件,java,servlets,Java,Servlets,我已经创建了一个servlet代码。主要目标是将数据从数据库写入csv文件。在我的代码中,csv文件下载成功,但文件仍然为空。该项目包含javacsv.jar文件。我不知道这是为什么。请说明我是如何做到这一点的。有关摘要,请阅读以下要点: 从数据库表访问数据 然后将该数据写入csv文件,格式为data here。[我需要这种格式,因为我可以根据我的要求格式化数据。] 请澄清一下:)请参考下面的Servlet代码: 公共类excelServletFile扩展了HttpServlet{ 字符串名

我已经创建了一个servlet代码。主要目标是将数据从数据库写入csv文件。在我的代码中,csv文件下载成功,但文件仍然为空。该项目包含javacsv.jar文件。我不知道这是为什么。请说明我是如何做到这一点的。有关摘要,请阅读以下要点:

  • 从数据库表访问数据
  • 然后将该数据写入csv文件,格式为data here。[我需要这种格式,因为我可以根据我的要求格式化数据。]
  • 请澄清一下:)请参考下面的Servlet代码:
公共类excelServletFile扩展了HttpServlet{
字符串名称=”;
字符串email=“”;
字符串eid=“用户名”;
受保护的void processRequest(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
试一试{
字符串文件名=eid+“Data.csv”;
ServletContext=getServletContext();
字符串mimeType=context.getMimeType(文件名);
if(mimeType==null){
mimeType=“应用程序/八位字节流”;
}
response.setContentType(mimeType);
字符串headerKey=“内容处置”;
String headerValue=String.format(“附件;文件名=\%s\”,文件名);
response.setHeader(headerKey,headerValue);
OutputStream outStream=response.getOutputStream();
ConnectionClass cn=新的ConnectionClass();
Connection con=cn.connectDb();
编制报表;
结果集rs;
字符集cs=Charset.forName(“UTF-8”);
Writer Writer=新的PrintWriter(系统输出);
writer.flush();
作者。附加(“姓名”);
writer.append(“电子邮件”);
ps=con.prepareStatement(“选择名称,来自用户的电子邮件”);
rs=ps.executeQuery();
while(rs.next()){
name=rs.getString(“name”);
email=rs.getString(“email”);
PrintWriter out=response.getWriter();
out.println(名称);
out.println(电子邮件);
writer.append(名称);
writer.append(电子邮件);
}
writer.close();
}捕获(例外e){
系统输出打印ln(e);
}
}
//数据库连接文件

 public class ConnectionClass {


        public Connection connectDb() {

            Connection con=null;
            try {
                Class.forName("com.mysql.jdbc.Driver");  
                 con=DriverManager.getConnection("jdbc:mysql://localhost:3306/classicmodels","root","root");  
            }catch (Exception e) {
                con=null;
            }

            if(con!=null)
                System.out.println("connected");
            else
                System.out.println("not connected");

            return con;
        }
    }
//CSVUtil文件

package servletProject;

import java.io.IOException;
import java.io.Writer;
import java.util.List;

public class CSVUtils {

    private static final char DEFAULT_SEPARATOR = ',';

    public static void writeLine(Writer w, List<String> values) throws IOException {
        writeLine(w, values, DEFAULT_SEPARATOR, ' ');
    }

    public static void writeLine(Writer w, List<String> values, char separators) throws IOException {
        writeLine(w, values, separators, ' ');
    }

    // https://tools.ietf.org/html/rfc4180
    private static String followCVSformat(String value) {

        String result = value;
        if (result.contains("\"")) {
            result = result.replace("\"", "\"\"");
        }
        return result;

    }

    public static void writeLine(Writer w, List<String> values, char separators, char customQuote) throws IOException {

        boolean first = true;

        // default customQuote is empty

        if (separators == ' ') {
            separators = DEFAULT_SEPARATOR;
        }

        StringBuilder sb = new StringBuilder();
        for (String value : values) {
            if (!first) {
                sb.append(separators);
            }
            if (customQuote == ' ') {
                sb.append(followCVSformat(value));
            } else {
                sb.append(customQuote).append(followCVSformat(value)).append(customQuote);
            }

            first = false;
        }
        sb.append("\n");
        w.append(sb.toString());
    }

}
包服务项目;
导入java.io.IOException;
导入java.io.Writer;
导入java.util.List;
公共类CSVutil{
私有静态最终字符默认_分隔符=',';
公共静态void writeLine(Writer w,列表值)引发IOException{
writeLine(w,值,默认分隔符“”);
}
公共静态void writeLine(Writer w、列表值、字符分隔符)引发IOException{
写线(w,值,分隔符,);
}
// https://tools.ietf.org/html/rfc4180
私有静态字符串followCVSformat(字符串值){
字符串结果=值;
if(result.contains(“\”){
结果=结果。替换(“\”,“\”);
}
返回结果;
}
公共静态void writeLine(Writer w、列表值、字符分隔符、字符customQuote)引发IOException{
布尔值优先=真;
//默认customQuote为空
如果(分隔符=“”){
分隔符=默认的_分隔符;
}
StringBuilder sb=新的StringBuilder();
for(字符串值:值){
如果(!第一个){
某人附加(分隔符);
}
如果(customQuote==''){
某人附加(跟随格式(值));
}否则{
附加(customQuote);附加(followCVSformat(value))。附加(customQuote);
}
第一个=假;
}
某人附加(“\n”);
w、 附加(某人的字符串());
}
}

可能
在关闭CsvWriter之前刷新它?你的意思是说我必须编写csvOutput.endRecord();在while循环之外?不。我的意思是,
OutputStream
Writer
都实现了
Flushable
,因此有一个
flush
方法,它确保仍然在缓冲区中的任何数据都被写入流目标。好的,我明白了。你能给我举个小例子吗?它非常简单。您可以在
csvOutput.close();
之前调用
csvOutput.flush();
,或者如果CsvWriter实际上没有实现writer,您可以调用
outStream.flush()
为您的答案添加更多详细信息,即:上述代码如何解决问题。不建议简单地发布代码,请查看此处。如果可能,请在您的答案中添加更多详细信息。CSVUtils是一个java文件或servlet?感谢您的帮助,但它只下载空的octate流,而不是excel文件。为什么这里真的需要三个文件中的大部分,只需要一个小功能??一个servlet文件和一个类连接文件也可以吗。@Govind Sharma你能帮我一个忙吗?代码正在执行。但它正在替换以前的文件。我试图在加载servlet页面时下载新文件。每次新文件e将被下载。顺便说一句,每次都会加载一个名为“ExcelServletFile”的文件,而不是我正在尝试的这个文件。csv文件将被下载。兄弟,请帮我解决这个问题。这是我对你的谦虚请求,伙计。
package servletProject;

import java.io.IOException;
import java.io.Writer;
import java.util.List;

public class CSVUtils {

    private static final char DEFAULT_SEPARATOR = ',';

    public static void writeLine(Writer w, List<String> values) throws IOException {
        writeLine(w, values, DEFAULT_SEPARATOR, ' ');
    }

    public static void writeLine(Writer w, List<String> values, char separators) throws IOException {
        writeLine(w, values, separators, ' ');
    }

    // https://tools.ietf.org/html/rfc4180
    private static String followCVSformat(String value) {

        String result = value;
        if (result.contains("\"")) {
            result = result.replace("\"", "\"\"");
        }
        return result;

    }

    public static void writeLine(Writer w, List<String> values, char separators, char customQuote) throws IOException {

        boolean first = true;

        // default customQuote is empty

        if (separators == ' ') {
            separators = DEFAULT_SEPARATOR;
        }

        StringBuilder sb = new StringBuilder();
        for (String value : values) {
            if (!first) {
                sb.append(separators);
            }
            if (customQuote == ' ') {
                sb.append(followCVSformat(value));
            } else {
                sb.append(customQuote).append(followCVSformat(value)).append(customQuote);
            }

            first = false;
        }
        sb.append("\n");
        w.append(sb.toString());
    }

}