package com.excel.test;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 文件规则
* Microsoft的格式是最简单的。以逗号分隔的值要么是“纯粹的”(仅仅包含在括号之前),
* 要么是在双引号之间(这时数据中的双引号以一对双引号表示)。
* Ten Thousand,10000, 2710 ,,"10,000","It's ""10 Grand"", baby",10K
* 这一行包含七个字段(fields):
* Ten Thousand
* 10000
* 2710
* 空字段
* 10,000
* It's "10 Grand", baby
* 10K
* 每条记录占一行
* 以逗号为分隔符
* 逗号前后的空格会被忽略
* 字段中包含有逗号,该字段必须用双引号括起来。如果是全角的没有问题。
* 字段中包含有换行符,该字段必须用双引号括起来
* 字段前后包含有空格,该字段必须用双引号括起来
* 字段中的双引号用两个双引号表示
* 字段中如果有双引号,该字段必须用双引号括起来
* 第一条记录,可以是字段名
*/
/**
public class TestCSVRead {
private InputStreamReader fr = null;
private BufferedReader br = null;
public TestCSVRead(String f) throws IOException {
fr = new InputStreamReader(new FileInputStream(f));
}
/**
* 解析csv文件 到一个list中
* 每个单元个为一个String类型记录,每一行为一个list。
* 再将所有的行放到一个总list中
* @return
* @throws IOException
*/
public List<List<String>> readCSVFile() throws IOException {
br = new BufferedReader(fr);
String rec = null;//一行
String str;//一个单元格
List<List<String>> listFile = new ArrayList<List<String>>();
try {
//读取一行
// if(br!=null) br.readLine();
while ((rec = br.readLine()) != null) {
Pattern pCells = Pattern
.compile("(\"[^\"]*(\"{2})*[^\"]*\")*[^,]*,");
rec +=",";
Matcher mCells = pCells.matcher(rec);
List<String> cells = new ArrayList<String>();//每行记录一个list
//读取每个单元格
while (mCells.find()) {
// System.out.println(mCells.end());
str = mCells.group();
str = str.replaceAll(
"(?sm)\"?([^\"]*(\"{2})*[^\"]*)\"?.*,", "$1");
str = str.replaceAll("(?sm)(\"(\"))", "$2");
// str = str.replaceAll("(.*)\"$", "$1");
cells.add(str);
}
listFile.add(cells);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fr != null) {
fr.close();
}
if (br != null) {
br.close();
}
}
return listFile;
}
public static void main(String[] args) throws Throwable {
TestCSVRead parser = new TestCSVRead("");
List<List<String>> list = parser.readCSVFile();
List<String> listTitle = list.get(20);
for(int i=0;i<listTitle.size();i++){
System.out.println(i+" ###### "+listTitle.get(i));
}
}
}
分享到:
相关推荐
Java CVS 解析详解 在软件开发领域,版本控制系统(Version Control System, VCS)是不可或缺的工具,它帮助开发者管理代码的历史版本,协同合作。其中,CVS(Concurrent Versions System)是一个开源的、网络化的...
sqlldr user/pwd@db_name control=control_file.ctl data=yourdata.csv ``` 2. SQL Developer:这是一个图形用户界面工具,操作更为直观。打开SQL Developer,创建新的“数据导入”任务,选择CSV文件,设置列分隔符...
在Java中,解析CSV文件通常需要借助第三方库,如本例中提到的`javacsv-2.0.jar`。下面我们将详细讲解如何使用Java和Struts2框架来实现CSV文件的读取与处理。 首先,在前端,我们需要一个HTML表单让用户选择要上传的...
这些报告可以导出为各种格式,如CSV或PDF,便于进一步分析或分享。 **用户界面**方面,尽管Timewarrior Java控件本身并不提供图形界面,但它鼓励开发者利用提供的API创建自定义的UI,以适应不同用户的工作习惯和...
《使用JMeter API进行负载测试:Java代码实现与报告生成》 在软件性能测试领域,Apache JMeter是一款广泛应用的开源工具,它支持多种协议和服务的性能和稳定性测试。然而,通常我们是通过图形用户界面(GUI)来设计...
sqluldr2 username/password@database control=/path/to/control_file.ctl log=/path/to/log_file.log data=/path/to/data_file.csv ``` 在Linux中,路径通常使用正斜杠`/`分隔,且文件名不区分大小写。 ### 4. ...
- TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP Socket通信中,客户端会先建立连接,然后才能进行数据传输,确保数据按照顺序无丢失地到达。 - 客户端通常...
你可能需要了解如何读取和操作数据文件(如CSV或JSON),使用Java的流(Stream) API进行数据过滤和转换,以及基础的统计计算和可视化。 "spc"可能是“统计过程控制”(Statistical Process Control)的缩写,这是一种...
8. **控制结构(Control Structures)**:程序可能使用if语句、for循环或while循环来遍历学生列表,进行条件判断或重复执行某些任务。 9. **继承与多态(Inheritance and Polymorphism)**:虽然这个简单的学生登记...
Selenium的核心组件包括WebDriver和Selenium RC(Remote Control)。WebDriver是一个API,它直接与浏览器进行通信,模拟用户的行为。Selenium RC则是一个服务器,可以接收测试脚本并控制浏览器执行。随着WebDriver的...
25. **Google Guice**:轻量级的IOC(Inversion of Control)框架,声称性能优于Spring。 26. **CGLib**:动态代理框架,被Spring和Hibernate等框架用于实现动态代理。 27. **JBoss jBPM**:开源的工作流引擎,...
1. Java后台服务器响应头设置:包括Content-Disposition、Access-Control-Expose-Headers、FileName等参数的设置。 2. Excel文件流生成:使用ExcelUtils工具类生成Excel文件流。 3. React前端文件流处理:使用axios...
JeeSite提供了完善的权限控制机制,支持RBAC(Role-Based Access Control)角色权限管理,可以精细到操作级别的权限分配,确保系统的安全性和稳定性。同时,权限控制与菜单系统紧密结合,实现了动态权限分配和权限的...
对于初学者,可以使用文件存储,如序列化技术或CSV文件。 在实现这个项目时,你将接触到以下几个关键的Java技术: - 控制台输入/输出(Console Input/Output):使用System.in读取用户输入,使用System.out....
它通过IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)两大核心特性,实现了代码的解耦和模块化。在本项目中,Spring可能被用来创建DAO(Data Access Object)和Service...
此外,Selenium还支持数据驱动测试,通过外部数据源(如CSV文件或数据库)提供测试数据,提高测试的覆盖率和灵活性。 总的来说,Selenium Remote Control 提供了一个强大且灵活的平台,用于Web应用的自动化测试。它...
PCL(Platform Control Language)通常由Affymetrix公司生成,而CDT(Chip Description Table)文件则包含了微阵列芯片的详细信息。 2. **可视化**:Java Treeview将数据以树形结构展示,使得用户可以清晰地看到...
“Delimit”一词在编程中通常用于分隔数据,如在CSV文件中,逗号就是分隔符。时间戳“timestamp”记录了特定事件发生的时间信息,而在编程中,它常用于追踪程序运行状态。间隔“interval”则可能指两个时间点或数据...
用于集成以下框架工具的示例项目Gradle to Build and Dependency Control MyIbatis as ORM for Mapping & Persistence JDBC Driver for PostgreSQL Junit For Some Unite Test Log4J 或 logback 或 SLF4J for LOGGIN...
Spring框架通过其IoC(Inversion of Control)或依赖注入(Dependency Injection)机制帮助实现松耦合。在IoC中,Spring容器负责创建对象并管理它们之间的依赖关系,而不是由对象自己管理。这样,对象只需要声明它们...