其实是一个公司的笔试题,上网查查,发现网上的代码都是不完全正确的。没有考虑到一些极端的例子。贴段代码,方便自己以后查看。
主要是分析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文件知识点 #### 一、简介与背景 在日常的数据处理工作中,CSV(Comma-Separated Values)文件是一种常见的数据交换格式。它简单易用且跨平台兼容性好,常被用于导入导出数据、数据分析等场景。在...
本文将深入探讨如何使用Java语言来操作CSV文件,包括读取、写入以及处理CSV数据。 首先,Java并没有内置的库直接支持CSV操作,但我们可以借助第三方库,如Apache Commons CSV、OpenCSV或Java 8引入的java.util.CSV ...
3. **验证文件编码**:确保CSV文件的实际编码与你在代码中指定的编码一致。可以使用工具,如Notepad++,来检查和更改文件编码。 4. **处理BOM头**:UTF-8有带BOM和不带BOM两种形式,如果文件开头带有BOM标记,可能...
首先,我们需要了解如何使用Java的标准库`java.io`和`java.nio`来读取CSV文件。最常用的是使用`BufferedReader`配合`Scanner`或者`Files.lines()`方法。例如: ```java import java.io.BufferedReader; import java...
以下是使用 javacsv 库读取 CSV 文件的示例代码: Java 代码: ```java public List[]> importCsv(String file) { List[]> list = new ArrayList(); CsvReader reader = null; try { reader = new CsvReader...
接下来,我们需要编写代码来读取CSV文件。使用`CSVReader`类,可以逐行读取文件并解析每个字段。例如: ```java import com.opencsv.CSVReader; import java.io.FileReader; import java.io.IOException; public ...
本篇将详细介绍如何在Java中解析CSV文件,并以给定的"Java解析CSV文件"主题为例,结合提供的资源——`lucky_number_format.csv`、`javacsv-2.0.jar`和`CsvUtil.java`进行深入探讨。 首先,我们来看`javacsv-2.0.jar...
使用univocity-parsers,我们可以方便地将Java对象转换为CSV格式,或者从CSV文件中解析数据。以下是使用该库创建CSV文件的基本步骤: 1. 添加依赖:在你的项目中,你需要引入univocity-parsers的Maven或Gradle依赖...
首先,我们需要了解如何在Java中生成CSV文件。CSV文件主要由一系列行组成,每行包含一个或多个以逗号分隔的值。在Java中,我们可以使用`BufferedWriter`或者`PrintWriter`来创建和写入这些文件。例如: ```java ...
本篇文章将深入探讨如何使用Java来读取和写入CSV文件,并介绍一些通用的接口和方法。 首先,Java标准库并未提供专门处理CSV的类,但我们可以借助第三方库如Apache Commons CSV、OpenCSV或Java 8及以上版本的内置`...
本篇文章将深入探讨如何使用Java实现CSV文件的生成,并将其通过SFTP(Secure File Transfer Protocol)协议上传到指定服务器。 首先,我们要介绍的是用于生成CSV文件的库:univocity-parsers。这是一个高效、灵活且...
本教程将介绍如何使用javaCSV.jar库来读取和写入CSV文件。如果你对这个话题已经很熟悉,那么这个示例可能对你来说过于基础,但对初学者来说,它提供了一个很好的起点。 首先,我们需要引入javaCSV.jar库。这个库...
上述代码演示了如何使用Apache Commons CSV库创建一个包含表头和数据的CSV文件。 接下来,我们讨论读取CSV文件,特别是自动识别文件编码。在Java中,`java.nio.charset.Charset`类用于表示字符编码,但默认情况下,...
2.生成csv,中文无乱码,数据不会科学计数法; 3.支持大数据下载; 4.后台服务java语言实现,前端不限制; 5.前端代码: [removed]void(0)" class="layui-btn"> <i class="fa fa-refresh"> 导出Excel ...
理解并熟练运用`javacsv_CsvReader`可以帮助开发者更高效地处理CSV文件,实现数据的读取、解析和转换,为各种数据操作任务提供便利。在处理大量数据时,正确使用CSV读取库可以极大地提高代码的可读性和效率。
在Java中,我们可以使用`BufferedWriter`或者Apache Commons CSV库来实现CSV文件的创建。 1. 使用`BufferedWriter`: ```java import java.io.*; public void exportCSV(String[] headers, List[]> data) { try ...
这个"java 读写csv文件 csv process"接口为处理CSV文件提供了一个全面的解决方案,它不仅实现了基本的读写功能,还支持数据转换和高级的文件修改操作。这样的接口对于需要处理CSV数据的Java项目来说非常实用,简化了...
csv文件是 comma separated values 的缩写,常用于数据交换和导入导出操作。然而,在Java中读取和写入csv文件时,中文字符如果不正确地处理,可能会出现乱码的情况。下面我们将详细介绍Java避免UTF-8的csv文件打开...
### Java操作CSV文件知识点 #### 一、简介 在日常开发工作中,经常需要处理各种格式的数据文件,其中CSV(逗号分隔值)文件是一种常见的数据存储格式。它以纯文本形式存储表格数据,每行表示一个数据记录,每个...
在Eclipse中,你可以创建一个新的Java项目,将CSV文件放入项目的资源目录下,然后编写上述代码进行测试。记得在运行前检查CSV文件的编码格式,确保与Java程序的编码设置一致,以防止乱码问题。 通过这种方式,你...