这篇文章主要围绕如何使用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导出)
- bash – 如何在AWK中以CSV格式打印一系列列?
- c# – 以CSV格式显示逗号而不使用逗号字符
- java 导出csv格式
- javascript – 如何使用jquery将数据从表导出到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格式打印一系列列?
使用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 -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格式显示逗号而不使用逗号字符
目前我用,替换逗号;但这在Excel中显示为文字字符串.
是否有标准方法在不使用实际逗号字符的情况下在CSV文件中显示逗号?即使只适用于excel的解决方案也可以使用,因为我们的大多数客户都将使用Excel来查看此文件.
解决方法
>应引用包含逗号的列
>包含引号的引用列应该对引用进行转义
例:
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
本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文件
我正在尝试从数据表导出到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()'> <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文件等相关知识的信息别忘了在本站进行查找喔。
本文标签: