2014-10-30 147 views
0
CSVParser csvParser = null; 
String csvFilename = "C:\\Users\\ITEM.txt20141022"; 


csvParser = new CSVParser(new BufferedReader(new FileReader(csvFilename)), CSVFormat.newFormat('|')); 

的算法,据我的理解:请帮助我了解这行代码

  1. 的对象的FileReader传递给BufferedReader类的构造函数。
  2. BufferedReader对象被传递给CSVParser构造函数。这将是传递给csvParser的两个参数之一?
  3. 第二csvParser参数是CSVFormat.newFormat(“|”)

请问此行被认为是传递给csvParser对象两个参数?这两个参数然后在csvParser构造函数中使用?我查看了javadocs,并且无法理解所有这些部分如何组合在一起来实例化CSVParser。你怎么知道这是可能的呢?我几个星期以来一直在学习初学java课程,而我从未见过这样的事情。有人可以向我解释这条线是如何工作的,就好像你在跟一个5岁的孩子说话一样。

+1

你会查看CSVParser的javadoc,并看到它有一个构造函数接受BufferedReader或Reader作为第一个参数,并且可能是一个CSVFormat(假设这是'newFormat()'返回的)作为第二个参数。有几十个名为CSVParser的不同类,所以我们不知道你在使用哪一个类。 – 2014-10-30 18:42:12

+0

在我看来,你已经知道了。哪个'CSVParser'就是这个,来自Apache Commons的,[这个构造函数](https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVParser.html#CSVParser -java.io.Reader-org.apache.commons.csv.CSVFormat-)? – ajb 2014-10-30 18:42:52

+0

是的,我正在使用Apache公用程序。我听说如果可能的话,建议这样做。它是否正确?如果可以,请使用apache commons类。我得到的解释是它的尝试和真实。 – stackoverflow1 2014-10-30 18:46:30

回答

2

你说的没错,尽可能接近我所知道的。

该程序员正在调用构造函数来代替声明正确类型的对象,实例化对象以放入对象变量,然后使用变量。它也可以写成:

CSVFormat format = CSVFormat.newFormat('|'); 
FileReader reader = new FileREader(csvFilename); 
BufferedReader bReader = new BufferedReader(reader); 
CSVParser parser = new CSVParser(bReader, format); 

我假定第一个方法调用返回的类型。

希望更清楚。这是我怎么会写吧...

+0

这是很容易理解的。哇谢谢你。现在我需要解决他如何缩短它。再次感谢。 – stackoverflow1 2014-10-30 18:50:08

+0

@ stackoverflow1这对新手来说更容易。但任何只有一点Java经验的开发人员都很了解您的原始代码。有经验的Java开发人员可能会发现“简化”代码太冗长,并引入无用的变量。 – 2014-10-30 18:55:20

+0

一些有经验的Java开发人员可能会这样认为。我已经用Java编程了15年,而且我仍然发现原始版本更易于理解,调试并确保正确。而引入变量的唯一区别是显式变量是可见的。它们不占用额外的内存空间,编译时间可以忽略不计,等等。 - 第一种方式没有技术上的理由,第二种方式是软件工程原因。例如:它为作者提供了一个命名参数的机会,以便更好地描述事物。 – arcy 2014-10-30 19:00:22

0

CSVParser构造函数有两个参数如下:

CSVParser(Reader reader, CSVFormat format) 

现在认真按照代码,应该很容易理解,把括号照顾