我想为学校java项目编写一个程序来解析一些我不知道的CSV.我知道每列的数据类型 - 虽然我不知道分隔符.
我甚至不知道如何修复的问题是解析日期甚至DateTime列.它们可以是多种格式之一.
我找到了很多图书馆,但不知道哪个图书馆最符合我的需求:http: //opencsv.sourceforge.net/ http://www.csvreader.com/java_csv.php http://supercsv.sourceforge.net/ http ://flatpack.sourceforge.net/
问题是我是一个java初学者.我担心没有那些图书馆可以做我需要的,或者我无法说服他们去做.
我打赌这里有很多人都有代码示例,可以让我立刻开始我需要的东西:
通过电子邮件获取尽可能多的代码示例会很不错.
非常感谢!如
Val*_*her 18
您还拥有Apache Commons CSV库,也许它可以满足您的需求.请参阅指南.已更新至2014-11版的1.1版.
此外,对于万无一失的版本,我认为你需要自己编码...通过SimpleDateFormat你可以选择你的格式,并指定各种类型,如果Date不像你的任何预先考虑的类型,它不是一个约会.
Agi*_*Pro 18
使用时存在严重问题
String[] strArr=line.split(",");
Run Code Online (Sandbox Code Playgroud)
为了解析CSV文件,这是因为数据值中可能有逗号,在这种情况下,您必须引用它们,并忽略引号之间的逗号.
有一种非常简单的方法可以解析它:
/**
* returns a row of values as a list
* returns null if you are past the end of the input stream
*/
public static List<String> parseLine(Reader r) throws Exception {
int ch = r.read();
while (ch == '\r') {
//ignore linefeed chars wherever, particularly just before end of file
ch = r.read();
}
if (ch<0) {
return null;
}
Vector<String> store = new Vector<String>();
StringBuffer curVal = new StringBuffer();
boolean inquotes = false;
boolean started = false;
while (ch>=0) {
if (inquotes) {
started=true;
if (ch == '\"') {
inquotes = false;
}
else {
curVal.append((char)ch);
}
}
else {
if (ch == '\"') {
inquotes = true;
if (started) {
// if this is the second quote in a value, add a quote
// this is for the double quote in the middle of a value
curVal.append('\"');
}
}
else if (ch == ',') {
store.add(curVal.toString());
curVal = new StringBuffer();
started = false;
}
else if (ch == '\r') {
//ignore LF characters
}
else if (ch == '\n') {
//end of a line, break out
break;
}
else {
curVal.append((char)ch);
}
}
ch = r.read();
}
store.add(curVal.toString());
return store;
}
Run Code Online (Sandbox Code Playgroud)
这种方法有许多优点.请注意,每个字符都会被触摸一次.没有提前读取,推回缓冲区等.不要在行结束前搜索,然后在解析之前复制该行.此解析器纯粹从流中工作,并创建一次每个字符串值.它适用于标题行和数据行,您只需处理适合于此的返回列表.您为它提供了一个阅读器,因此使用您选择的任何编码将基础流转换为字符.流可以来自任何来源:文件,HTTP帖子,HTTP get,并直接解析流.这是一个静态方法,因此没有对象可以创建和配置,当它返回时,没有内存被保留.
您可以在我的博客文章中找到关于此代码的完整讨论,以及为什么选择此方法: CSV文件所需的唯一类.
我的方法不是从编写自己的API开始.生命太短暂,还有更迫切需要解决的问题.在这种情况下,我通常:
从某人已经写过的东西开始.可能性很大,它会做你想要的.如有必要,您以后可以随时编写自己的文件.OpenCSV是一个很好的起点.