我正在尝试将CSV文件读入列表(字符串)列表中,传递它以从数据库中获取一些数据,构建新数据列表列表,然后传递列表列表以便它可以是写入新的CSV文件.我看了一遍,似乎无法找到如何做到这一点的例子.
我宁愿不使用简单的数组,因为文件的大小会有所不同,我不知道如何使用数组的维度.我没有处理文件的问题.我只是不确定如何处理列表列表.
我发现的大多数示例都将创建多维数组或在循环内执行从文件中读取数据的操作.我知道我可以这样做,但我想编写面向对象的代码.如果您可以提供一些示例代码或指向我的参考,那将是很好的.
tst*_*ter 131
ArrayList<ArrayList<String>> listOLists = new ArrayList<ArrayList<String>>();
ArrayList<String> singleList = new ArrayList<String>();
singleList.add("hello");
singleList.add("world");
listOLists.add(singleList);
ArrayList<String> anotherList = new ArrayList<String>();
anotherList.add("this is another list");
listOLists.add(anotherList);
Run Code Online (Sandbox Code Playgroud)
小智 15
如果您真的想知道在Java中完美地处理CSV文件,那么尝试自己实现CSV读取器/写入器并不好.检查下面.
http://opencsv.sourceforge.net/
当您的CSV文档包含双引号或换行符时,您将面临困难.
首先要学习面向对象的方法,看看其他实现(通过Java)将对你有所帮助.而且我认为管理List中的一行并不好.CSV不允许您具有不同的列大小.
Bre*_*ode 11
这是一个示例,它将CSV字符串列表读入列表列表,然后遍历列表列表并将CSV字符串打印回控制台.
import java.util.ArrayList;
import java.util.List;
public class ListExample
{
public static void main(final String[] args)
{
//sample CSV strings...pretend they came from a file
String[] csvStrings = new String[] {
"abc,def,ghi,jkl,mno",
"pqr,stu,vwx,yz",
"123,345,678,90"
};
List<List<String>> csvList = new ArrayList<List<String>>();
//pretend you're looping through lines in a file here
for(String line : csvStrings)
{
String[] linePieces = line.split(",");
List<String> csvPieces = new ArrayList<String>(linePieces.length);
for(String piece : linePieces)
{
csvPieces.add(piece);
}
csvList.add(csvPieces);
}
//write the CSV back out to the console
for(List<String> csv : csvList)
{
//dumb logic to place the commas correctly
if(!csv.isEmpty())
{
System.out.print(csv.get(0));
for(int i=1; i < csv.size(); i++)
{
System.out.print("," + csv.get(i));
}
}
System.out.print("\n");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我觉得很简单.只有几点需要注意:
我建议在创建列表对象时在左侧使用"List"而不是"ArrayList".传递"List"界面会更好,因为如果以后你需要改变使用像Vector这样的东西(例如你现在需要同步列表),你只需要用"new"语句来改变这一行.无论您使用哪种列表实现,例如Vector或ArrayList,您仍然只是传递List<String>.
在ArrayList构造函数中,您可以将列表保留为空,它将默认为特定大小,然后根据需要动态增长.但是如果你知道你的列表有多大,你有时可以节省一些性能.例如,如果您知道文件中总会有500行,那么您可以这样做:
List<List<String>> csvList = new ArrayList<List<String>>(500);
这样你就不会浪费处理时间等待你的列表增长动态增长.这就是我将"linePieces.length"传递给构造函数的原因.通常不是什么大问题,但有时也很有帮助.
希望有所帮助!
@tster提供的示例显示了如何创建列表列表.我将提供一个迭代这样一个列表的例子.
Iterator<List<String>> iter = listOlist.iterator();
while(iter.hasNext()){
Iterator<String> siter = iter.next().iterator();
while(siter.hasNext()){
String s = siter.next();
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
297462 次 |
| 最近记录: |