如何使用Java导出CSV格式的数据? [英] How to export data in CSV format using Java?

查看:955
本文介绍了如何使用Java导出CSV格式的数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

原因可能是java中缺乏知识:(所以我问这个问题,

The reason may be the the short of knowledge in java :( ,so I'm asking this question,

这段代码中我得到了动态值(来自jsp页面):

Here in this piece of code I'm getting dynamic value(from a jsp page) :

<form action="">
  <% 
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost/apps","root","root");
    Statement stmt = con.createStatement();
    String sql = "select * from info;";
    ResultSet rs = stmt.executeQuery(sql);
    System.out.println(sql);
    System.out.println("hi Tirtha");
  %>
  <center>
    <h3>Information of User's</h3>
    <table cellpadding="4" cellspacing="2" border="1" bgcolor="">
      <tr>
        <th>User Name</th>
        <th>Email Id</th>
      </tr>
      <tr>
        <%while(rs.next()){%>
          <td><input type="text" name="name" value="<%= rs.getString(1)%>" readonly="readonly">
          <td><input type="text" name="email" value="<%= rs.getString(2)%>" readonly="readonly">
          </tr>
        <%}%>
    </table>
  </center>
</form>

现在我想将这些数据保存在csv文件中(有一个导出选项)。

Now I want to save this data in a csv file(having an export option in it).

任何输入都将受到赞赏。

Any inputs will be appreciated.

推荐答案

这是一个可以用来导出到CSV的类:

here is a class you can using to export to CSV:

import java.io.FileWriter;
import java.io.IOException;
import User;

 public class GenerateCsv
 {


    private static void generateCsvFile(ArrayList<User> users)
    {
        String output = "Email, Name\n";

        for (User user in users) {
            output += user.getEmail() + ", " + user.getName() + "\n";
        }

        return output;
    }
 }

使用MVC方式

以下是您的代码编写方式:

Here is how your code should be written:

假设您有一个名为的类。 User.java 里面有一个名为get all users的静态函数

Let's say you have a class called. User.java inside of which there is a static function called get all users

public class User {

    String name;
    String email;

    public static ArrayList<User> getAllUsers() {
        // returns all users
        ... 
    }

}

然后假设您有一个名为UsersServlet的servlet来获取这些用户:

Then let's say you have a servlet called UsersServlet which get these users:

import javax.servlet.*;
import javax.servlet.http.*;

public class UsersServlet extends HttpServlet {

    public void doGet (HttpServletRequest   req, HttpServletResponse  res)
        throws ServletException, IOException {

        res.setContentType("application/csv");
        PrintWriter w = res.getWriter();

        ArrayList<User> users = Users.getAllUsers();

        w.prinln(GenerateCsv.generateCsvFile(users));

        w.flush();
        w.close();
    }

    public void doPost (HttpServletRequest  req, HttpServletResponse  res)
        throws ServletException, IOException {
        ...
    }
}

,例如,你将有一个简单的锚标记来调用servlet(servlets调用User.java,获取数据,将它们形成CSV,然后将其输出到浏览器......)。这样的东西可行:

in your jsp, for example, you will have a simple anchor tag which calls the servlet (the servlets calls User.java, get data, forms them into a CSV and then outputs it to the browser...). Something like this would work:

<a href='/getCSV' > Export CSV </a>

但请注意,您必须使用servlet链接到 url web.xml:

but please note that you have to link the servlet to the url using web.xml:

<web-app>
    <servlet>
        <servlet-name>UsersServlet</servlet-name>
        <servlet-class>__package__.UsersServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>UsersServlet</servlet-name>
    <url-pattern>getCSV</url-pattern>
    </servlet-mapping>
</web-app>

编辑:写入磁盘而不是发送到浏览器

Writing to disk instead of sending to browser

 import java.io.FileWriter;
 import java.io.IOException;
 import User;

 public class GenerateCsv
 {


    private static void generateCsvFile(String fileName, ArrayList<User> users)
    {
           try
           {
                FileWriter writer = new FileWriter(fileName);

                writer.append("Email");
                writer.append(',');
                writer.append("Name");
                writer.append('\n');

                for (User user in users) {
                     writer.append(user.getEmail());
                     writer.append(',');
                     writer.append(user.getName());
                     writer.append('\n');
                }

                writer.flush();
                writer.close();
           } catch(IOException e) {
                 e.printStackTrace();
           } 
      }
 }

这篇关于如何使用Java导出CSV格式的数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆