其实是一个公司的笔试题,上网查查,发现网上的代码都是不完全正确的。没有考虑到一些极端的例子。贴段代码,方便自己以后查看。
主要是分析csv文件内容比较麻烦,特别是出来引号中的逗号。其他的都没什么。
package com.ltm.util;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class CsvHandler {
private List<List<String>> result;
CsvHandler() {
result = new ArrayList<List<String>>();
}
public void readerCSV(InputStream is) throws IOException {
String filePath = "H:\\pg\\test.csv";
BufferedReader in = new BufferedReader(new FileReader(filePath));
String str = "";
while ((str = in.readLine()) != null) {
List<String> r = new ArrayList<String>();
str = decodeString(str);
String[] s = str.split(",");
for (int i = 0; i < s.length; i++) {
String temp = s[i].replace("|", ",");
if (temp.startsWith("\"")) {
temp = temp.substring(1, temp.length() - 1);
}
temp = temp.replace("\"\"", "\"");
r.add(temp);
// System.out.println(temp);
}
result.add(r);
}
in.close();
}
/**
* 用户退出时自动将内存里的数据写入服务器文件中或者直接提示用户下载
*
* @param savePath
* @throws IOException
*/
public void closeCSV() throws IOException {
SimpleDateFormat dataFormat = new SimpleDateFormat("yyyyMMddHHmm");
Date today = new Date();
String filename = dataFormat.format(today);
File file = new File(filename+".csv");
if (!file.exists()){
file.createNewFile();
}
BufferedWriter out = new BufferedWriter(new FileWriter(file));
String temp = new String();
for (List<String> s : result) {
for (String str : s) {
temp += encodeString(str) + ",";
}
temp = temp.substring(0, temp.length() - 1);
out.write(temp);
temp = "";
out.newLine();
}
out.flush();
out.close();
}
public void editCsv(int row, int col, String s) {
this.result.get(row).set(col, s);
}
public void addDate(String[] s) {
List<String> e = new ArrayList<String>();
for (String st : s) {
e.add(st);
}
this.result.add(e);
}
public static String encodeString(String str) {
if (str.indexOf("\"") != -1 || str.indexOf(",") != -1) {
str = "\"" + str.replace("\"", "\"\"") + "\"";
}
return str;
}
/**
* 将""中的,转变为|
*
* @param args
*/
public static String decodeString(String str) {
int a = 0;
int b = 0;
int c = 0;
a = str.indexOf("\"");
while (a != -1) {
c = str.indexOf(",", a);
b = str.indexOf("\"", a + 1);
if (c == -1)
break;
if (a < c && c < b) {
String temp = str.substring(a + 1, b);
temp = temp.replace(",", "|");
str = str.substring(0, a + 1) + temp
+ str.substring(b, str.length());
}
a = str.indexOf("\"", b + 1);
}
return str;
}
public static void main(String[] args) {
CsvHandler cs = new CsvHandler();
try {
String[] a = { "sfds,df", "\"hi\"", "hibaby" };
cs.readerCSV(null);
cs.addDate(a);
cs.closeCSV();
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取列数
public int getCol() {
int temp = 0;
for (int i = 0; i < this.result.size(); i++) {
if (temp < this.result.get(i).size()) {
temp = this.result.get(i).size();
}
}
return temp;
}
// 获取最大的行数
public int getRow() {
return this.result.size();
}
}
分享到:
相关推荐
使用java对csv文件进行读写操作的源代码,包含javacsv.jar
2.生成csv,中文无乱码,数据不会科学计数法; 3.支持大数据下载; 4.后台服务java语言实现,前端不限制; 5.前端代码: [removed]void(0)" class="layui-btn"> <i class="fa fa-refresh"> 导出Excel ...
1.将数据导成.csv格式,并压缩成.zip格式后,显示下载提示(含保存文件路径) 2.前后台代码都有哦
读取与创建CSV文件,根据第三方jar包自动解析文件编码方式,相关jar包与使用说明
文件中包括读取excel、csv文件,同时可以将读取出的文件内容保存在另外一个excel或csv中。注意excel2003和excel2007调用的jar包也不一样,需要将代码进行修改。2007版的将HSSF改成XSSF,2003相反。csv文件用XSSF
主要介绍了java读取csv文件示例,这个java解析csv文件的例子很简单,下面直接上代码,大家参考使用吧
csv解析 javacsv2.1解析csv文件的方法 需要jar包 javacsv.jar ,该jar包在附件里有,代码也在附件里。你可以把jar包放入工程里直接测试。
扫描csv文件的数据到数据库中 java源代码
FTP上传文件压缩文件生成CSV文件代码文件生成上传至FTP文件管理服务器
主要介绍了java读取csv文件内容的示例,大家参考使用
javacsv.jar包,是一个小型的快速开放源代码Java库,用于读写CSV和纯定界文本文件。可以处理各种CSV文件,文本限定,Excel格式等。
用java代码将数据写入到csv中,生成csv文件,简单好用!
主要为大家详细介绍了java实现CSV文件导入与导出,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
java从本地读文件并上传Hbase
主要介绍了java 分割csv数据的实例详解的相关资料,这里提供了简单实例,需要的朋友可以参考下
一个合并CSV的代码,通俗易懂,可以自定义合并内容与文档
将 db 数据导出为 csv、json、xml 或 sql 文件的 Java 工具。 支持 Oracle DB、MySQL DB、PostgreSQL DB、Firebird DB、SQLite DB、Derby DB 和 HSQL DB。 此工具不包含所需的 db 驱动程序,但只需下载和配置一次...
java学生成绩管理期末作业,期末实践作业啊
描述:该项目是一个简单的 Java 源代码,具有将一些文本文件转换为 csv 文件的功能。 首先,tex 文件由 4 个参数组成,但在每个文件的名称中,都有日期。 第二点,新文件将具有以前的参数和日期、年份和月份。 每个...
Java往文件结尾追加数据(用Eclipse打开。)主要代码:RandomAccessFile vRandomAccessFile = new RandomAccessFile(sFile,"rw");vRandomAccessFile.writeBytes(sInput);