GVKun编程网logo

如何使用Java以CSV格式导出数据?(java csv导出)

24

这篇文章主要围绕如何使用Java以CSV格式导出数据?和javacsv导出展开,旨在为您提供一份详细的参考资料。我们将全面介绍如何使用Java以CSV格式导出数据?的优缺点,解答javacsv导出的相

这篇文章主要围绕如何使用Java以CSV格式导出数据?java csv导出展开,旨在为您提供一份详细的参考资料。我们将全面介绍如何使用Java以CSV格式导出数据?的优缺点,解答java csv导出的相关问题,同时也会为您带来bash – 如何在AWK中以CSV格式打印一系列列?、c# – 以CSV格式显示逗号而不使用逗号字符、java 导出csv格式、javascript – 如何使用jquery将数据从表导出到csv文件的实用方法。

本文目录一览:

如何使用Java以CSV格式导出数据?(java csv导出)

如何使用Java以CSV格式导出数据?(java csv导出)

原因可能是Java :(的知识不足),所以我问这个问题,

在这段代码中,我正在从jsp页面获取动态值:

<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文件中 (其中具有导出选项)。

任何输入将不胜感激。

答案1

小编典典

这是您可以用来导出为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方式工作

这是编写代码的方式:

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

public class User {    String name;    String email;    public static ArrayList<User> 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<User> 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,然后将其输出到浏览器…)。这样的事情会起作用:

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

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

<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>

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

 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();           }       } }

bash – 如何在AWK中以CSV格式打印一系列列?

bash – 如何在AWK中以CSV格式打印一系列列?

参见英文答案 > Extract specific columns from delimited file using Awk                                    8个
使用awk,我可以打印CSV中的任何列,例如,这将打印file.csv中的第10列.

awk -F,'{ print $10 }' file.csv

如果我需要打印5-10列,包括逗号,我只知道这种方式:

awk -F,'{ print $5","$6","$7","$8","$9","$10 }' file.csv

如果我想打印许多列,这种方法不太好.是否有更简单的语法在awk中以CSV格式打印一系列列?

解决方法

在awk中执行此操作的标准方法是使用for循环:

awk -v s=5 -v e=10 'BEGIN{FS=OFS=","}{for (i=s; i<=e; ++i) printf "%s%s",$i,(i<e?OFS:ORS)}' file

但是,如果您的分隔符很简单(如您的示例中所示),您可能更喜欢使用cut:

cut -d,-f5-10 file

Perl值得一提(使用-a启用autosplit模式):

perl -F,-lane '$"=","; print "@F[4..9]"' file

c# – 以CSV格式显示逗号而不使用逗号字符

c# – 以CSV格式显示逗号而不使用逗号字符

我有一个CSV格式的日志,我们写了一些日志记录操作.但是,其中一个字段允许用户输入,我需要确保如果他们在字段中输入我们解析它的逗号并将其替换为某些东西,例如,Excel将能够读取并在其中显示逗号放置(因此csv读者不会认为它是列的结尾).

目前我用&#44替换逗号;但这在Excel中显示为文字字符串.

是否有标准方法在不使用实际逗号字符的情况下在CSV文件中显示逗号?即使只适用于excel的解决方案也可以使用,因为我们的大多数客户都将使用Excel来查看此文件.

解决方法

处理嵌入式逗号的最佳方法是正确引用CSV文件:

>应引用包含逗号的列
>包含引号的引用列应该对引用进行转义

例:

Joe Smith,“Joe Smith,Jr.”,“Joe “”The Man”” Smith,Jr.”

我写了一个扩展方法来帮助解决这个问题:

static public string CsvQuote(this string text)
{
    if (text == null) return string.Empty;

    bool containsQuote = false;
    bool containsComma = false;
    int len = text.Length;

    for (int i = 0; i < len && (containsComma == false || containsQuote == false); i++)
    {
        char ch = text[i];
        if (ch == '"')
        {
            containsQuote = true;
        }
        else if (ch == ',' || char.IsControl(ch))
        {
            containsComma = true;
        }
    }

    bool mustQuote = containsComma || containsQuote;

    if (containsQuote)
    {
        text = text.Replace("\"","\"\"");
    }

    // Quote the cell and replace embedded quotes with double-quote or just return as is
    return mustQuote ? "\"" + text + "\"" : text;
}

用法:

logger.Write(myString.CsvQuote());

var csv = string.Join(",",listofStrings.Select(CsvQuote))

java 导出csv格式

java 导出csv格式

java 导出csv

本demo地址:https://github.com/woyaochengweidaniu/javaEE/tree/master/file-handling

依赖

  <!-- https://mvnrepository.com/artifact/com.univocity/univocity-parsers -->
        <dependency>
            <groupId>com.univocity</groupId>
            <artifactId>univocity-parsers</artifactId>
            <version>2.8.2</version>
        </dependency>

代码分层使用mybatisplus自动生成

工具类

package com.example.easyexcel.util;

import com.univocity.parsers.csv.CsvWriter;
import com.univocity.parsers.csv.CsvWriterSettings;

import java.io.*;
import java.util.List;

/**
 * @author lcm
 */
public class CsvUtils {

    public static void simpleExport(boolean quoteAllFields, String lineSeparator, String[] heads, List<Object[]> data, String fileName, OutputStream outputStream) throws UnsupportedEncodingException {
        CsvWriterSettings settings = new CsvWriterSettings();
        settings.setQuoteAllFields(quoteAllFields);
        //分割线使用系统默认
        settings.getFormat().setLineSeparator(lineSeparator);
        settings.setIgnoreLeadingWhitespaces(false);
        settings.setIgnoreTrailingWhitespaces(false);
        settings.setHeaders(heads);
        OutputStream csvResult = outputStream;
        //FileOutputStream csvResult =  new FileOutputStream("C:\\temp\\test.csv");
        //ByteArrayOutputStream csvResult = new ByteArrayOutputStream();

        CsvWriter writer = new CsvWriter(new OutputStreamWriter(csvResult, "UTF-8"), settings);

        writer.writeHeaders();
       writer.writeRows(data);
        writer.close();
        try {
            csvResult.close();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
}


调用, 没有处理业务 直接调用


package com.example.easyexcel.cvs;



import cn.hutool.core.util.URLUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.easyexcel.work.service.IUserService;
import com.example.easyexcel.util.CollectionUtil;
import com.example.easyexcel.util.CsvUtils;
import com.univocity.parsers.csv.CsvParser;
import com.univocity.parsers.csv.CsvParserSettings;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;


/**
 *
 * 项目源码 :   https://github.com/uniVocity/univocity-parsers
 *
 * maven地址:
 *          <dependency>
 *             <groupId>com.univocity</groupId>
 *             <artifactId>univocity-parsers</artifactId>
 *             <version>2.8.2</version>
 *         </dependency>
 *
 * @author lcm
 */
@RestController
public class CvsController {

    @Autowired
    private IUserService userService;

    /**
     * 导出CVS
     * @param response
     * @throws IOException
     */
    @GetMapping("exportCSV")
    public void exportCVS(HttpServletResponse response) throws IOException {
        ServletOutputStream csvResult = response.getOutputStream();
        response.setContentType("multipart/form-data");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-disposition", "attachment;filename="+ URLUtil.encode("test", StringUtil.UTF8) +".csv");
        String[] head = new String[]{"用户姓名","年龄","性别","地址","手机号","业余爱好","出生日期","创建时间"};
        List<Map<String, Object>> list = userService.listMaps(new QueryWrapper<>());
        List<Object[]> objects = CollectionUtil.collectToArray(list);
        CsvUtils.simpleExport(true,"\n",head,objects,"test",csvResult);
    }

    /**
     * 导入CVS
     * @param file
     * @return
     * @throws IOException
     */
    @PostMapping("importCSV")
    public Object uploadCSV(MultipartFile file) throws IOException {
        //##CODE_START

        CsvParserSettings settings = new CsvParserSettings();
        //the file used in the example uses ''\n'' as the line separator sequence.
        //the line separator sequence is defined here to ensure systems such as MacOS and Windows
        //are able to process this file correctly (MacOS uses ''\r''; and Windows uses ''\r\n'').
        settings.getFormat().setLineSeparator("\n");
        // creates a CSV parser  如果CSV经过Excel打开后文本格式发生改变,导入进来的是乱码
        CsvParser parser = new CsvParser(settings);

        // parses all rows in one go.
        List<String[]> allRows = parser.parseAll(file.getInputStream(),10000);

        for (String[] strings:allRows) {
            System.out.println(Arrays.toString(strings));
        }
        return "success";
    }



}

javascript – 如何使用jquery将数据从表导出到csv文件

javascript – 如何使用jquery将数据从表导出到csv文件

我正在尝试从数据表导出到CSV文件.这是我的全部功能.它下载一个文件,但它显示了表的整个代码,并没有将任何数据分开.当我说整个代码时,我指的是’table / table’中的所有内容@H_301_1@

@H_301_1@

function displayDataTable(index){
$("#pageOverlay").empty();
    html = "<div id='volumeChartDiv'><h4>Data Table</h4><table id='dataTable'role='grid'><thead><tr role='row'><th>header1</th><th>header2</th><th>header3</th></tr></thead><tbody><tr><td>cell1-1</td><td>cell1-2</td><td>cell1-3</td></tr><tr><td>bell2-1</td><td>bell2-2</td><td>bell2-3</td></tr><tr><td>fell3-1</td><td>fell3-2</td><td>fell3-3</td></tr></tbody></table><input type='button' value='Close' onclick='cloSEOverlay()'>&nbsp;&nbsp;<input type='button' id='exportDataTable' value='Export Table'></div>";
  $("#pageOverlay").html(html);
// export data function    
  $("#exportDataTable").click(function (e) {
      window.open('data:application/vnd.ms-excel,' + $('.dataTable').html());
      e.preventDefault();
});
   openOverlay();
}

解决方法:@H_301_1@

CSV格式不能接受$(‘.dataTable’).html()as .html()不是结构化数据,它甚至不是数据,只是一个愚蠢的hmtl.@H_301_1@

你必须从你的表中获取数据,创建一个表示CSV格式的字符串,然后下载它,因为你没有在下面显示你的表格数据结构的工作演示@H_301_1@

@H_301_1@

$('#export').click(function() {
  var titles = [];
  var data = [];

  /*
   * Get the table headers, this will be CSV headers
   * The count of headers will be CSV string separator
   */
  $('.dataTable th').each(function() {
    titles.push($(this).text());
  });

  /*
   * Get the actual data, this will contain all the data, in 1 array
   */
  $('.dataTable td').each(function() {
    data.push($(this).text());
  });
  
  /*
   * Convert our data to CSV string
   */
  var CSVString = prepCSVRow(titles, titles.length, '');
  CSVString = prepCSVRow(data, titles.length, CSVString);

  /*
   * Make CSV downloadable
   */
  var downloadLink = document.createElement("a");
  var blob = new Blob(["\ufeff", CSVString]);
  var url = URL.createObjectURL(blob);
  downloadLink.href = url;
  downloadLink.download = "data.csv";

  /*
   * Actually download CSV
   */
  document.body.appendChild(downloadLink);
  downloadLink.click();
  document.body.removeChild(downloadLink);
});

   /*
* Convert data array to CSV string
* @param arr {Array} - the actual data
* @param columnCount {Number} - the amount to split the data into columns
* @param initial {String} - initial string to append to CSV string
* return {String} - ready CSV string
*/
function prepCSVRow(arr, columnCount, initial) {
  var row = ''; // this will hold data
  var delimeter = ','; // data slice separator, in excel it's `;`, in usual CSv it's `,`
  var newLine = '\r\n'; // newline separator for CSV row

  /*
   * Convert [1,2,3,4] into [[1,2], [3,4]] while count is 2
   * @param _arr {Array} - the actual array to split
   * @param _count {Number} - the amount to split
   * return {Array} - splitted array
   */
  function splitArray(_arr, _count) {
    var splitted = [];
    var result = [];
    _arr.forEach(function(item, idx) {
      if ((idx + 1) % _count === 0) {
        splitted.push(item);
        result.push(splitted);
        splitted = [];
      } else {
        splitted.push(item);
      }
    });
    return result;
  }
  var plainArr = splitArray(arr, columnCount);
  // don't kNow how to explain this
  // you just have to like follow the code
  // and you understand, it's pretty simple
  // it converts `['a', 'b', 'c']` to `a,b,c` string
  plainArr.forEach(function(arrItem) {
    arrItem.forEach(function(item, idx) {
      row += item + ((idx + 1) === arrItem.length ? '' : delimeter);
    });
    row += newLine;
  });
  return initial + row;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button id="export">export</button>

<table>
  <tr>
    <th>Company</th>
    <th>Contact</th>
    <th>Country</th>
  </tr>
  <tr>
    <td>Alfreds Futterkiste</td>
    <td>Maria Anders</td>
    <td>Germany</td>
  </tr>
  <tr>
    <td>Centro comercial Moctezuma</td>
    <td>Francisco Chang</td>
    <td>Mexico</td>
  </tr>
  <tr>
    <td>Ernst Handel</td>
    <td>Roland Mendel</td>
    <td>Austria</td>
  </tr>
  <tr>
    <td>Island Trading</td>
    <td>Helen Bennett</td>
    <td>UK</td>
  </tr>
  <tr>
    <td>Laughing Bacchus Winecellars</td>
    <td>Yoshi Tannamuri</td>
    <td>Canada</td>
  </tr>
  <tr>
    <td>Magazzini Alimentari Riuniti</td>
    <td>Giovanni Rovelli</td>
    <td>Italy</td>
  </tr>
</table>

如果您发现任何错误,请在下方发表评论,我会修复它们@H_301_1@

关于如何使用Java以CSV格式导出数据?java csv导出的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于bash – 如何在AWK中以CSV格式打印一系列列?、c# – 以CSV格式显示逗号而不使用逗号字符、java 导出csv格式、javascript – 如何使用jquery将数据从表导出到csv文件等相关知识的信息别忘了在本站进行查找喔。

本文标签: