如何使用Java导出CSV格式的数据?

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

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

Information of User's

User Name Email Id
<input type="text" name="name" value="" readonly="readonly"> <input type="text" name="email" value="" readonly="readonly">

现在我想将这些数据保存在csv文件中 (其中包含导出选项)。

任何输入将不胜感激。

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

 import java.io.FileWriter; import java.io.IOException; import User; public class GenerateCsv { private static void generateCsvFile(ArrayList users) { String output = "Email, Name\n"; for (User user in users) { output += user.getEmail() + ", " + user.getName() + "\n"; } return output; } } 

使用MVC方式

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

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

 public class User { String name; String email; public static ArrayList getAllUsers() { // returns all users ... } } 

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

 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 users = Users.getAllUsers(); w.prinln(GenerateCsv.generateCsvFile(users)); w.flush(); w.close(); } public void doPost (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { ... } } 

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

  Export CSV  

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

   UsersServlet __package__.UsersServlet   UsersServlet getCSV   

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

  import java.io.FileWriter; import java.io.IOException; import User; public class GenerateCsv { private static void generateCsvFile(String fileName, ArrayList 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(); } } } 

将代码嵌入JSP中通常是不好的做法,最好使用servlet,java类或Spring,JSF,Struts等Web框架…

但是,使用上面的示例。 最简单的方法是创建另一个JSP页面,如下所示:

 <%@page contentType="text/text" %> <% 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); %> <% while(rs.next()){ out.println("\"" + rs.getString(1) + "\", \"" + rs.getString(2) + "\"\n"); }%> <% //cleanup and close db access %> 

这将内容类型设置为文本文件,因此浏览器可以正确显示它。 然后它遍历您的记录集并输出一行,其中两个字段用引号括起来,并以\n换行符结束每一行。 然后,在原始页面上,您将只有一个指向此新JSP页面的链接以下载CSV。

或者,您可以使用OpenCSV等现有库。 这将允许更复杂的需求,并且还可以通过自动处理转义或特殊情况来节省麻烦。