我想用java读取PSV文件。我的PSV文件中的记录有4列。我想只读取和输出第3列和第4列。做这个的最好方式是什么。 这就是我所拥有的:
BufferedReader PSVFile = new BufferedReader(new FileReader(fileName));
String dataRow = PSVFile.readLine();
while (dataRow != null)
{
String[] dataArray = dataRow.split("\n");
for (String item:dataArray)
{
String[] elements = item.split("|");
System.out.println(item);
}
System.out.println();
dataRow = PSVFile.readLine();
}
PSVFile.close();
System.out.println();
基于@AljoshaBre建议Iam使用CSVReader,执行此操作:
reader = new CSVReader(new FileReader(fileName),'|');
String [] nextLine;
while ((nextLine = reader.readNext()) != null)
{
System.out.println( nextLine[3] + nextLine[4]);
}
我得到了所需的输出,但后来出错了: 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:2 在Read_PSV.main(Read_PSV.java:20) 第20行是System.out.println(nextLine [3] + nextLine [4]);
答案 0 :(得分:0)
OpenCSV是我的首选武器。
此代码段将为您提供第三和第四列:
try {
//last parameter tells it which line (row) to consider as the first one
CSVReader reader = new CSVReader(new FileReader("res/test.csv"), '|', '\0', 1);
String[] row;
List<String> columnThree = new ArrayList<String>();
List<String> columnFour = new ArrayList<String>();
while((row = reader.readNext()) != null) {
columnThree.add(row[2]);
columnFour.add(row[3]);
}
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
会打印
Nikola
Nenad
Ljubinka
Gordana
输入:
的 test.psv 强> 的
Name|Surname|Father|Mother
Aleksandar|Milic|Nikola|Ljubinka
Nebojsa|Jakovljevic|Nenad|Gordana
答案 1 :(得分:0)
Commons-Lang也有一个很好的课程:
// get a csv instance (which is cloned, so we can customize it)
StrTokenizer tokenizer = StrTokenizer.getCSVInstance();
// Set delimiter char
tokenizer.setDelimiterChar('|');
Scanner scanner = new Scanner(new File("file.psv"));
while (scanner.hasNextLine()) {
// set the input on the tokenizer
tokenizer.reset(scanner.nextLine());
// get the tokens
String toks[] = tokenizer.getTokenArray();
}
注意:StrTokenizer本身设计为一次只能处理一条记录,所以你必须使用像java的Scanner这样的东西一次拉一行。 StrTokenizer本身可以通过“重置”方法重用(虽然不是线程安全的)。
它有很多选项,例如引号字符,空格处理,空令牌处理等等......不确定opencsv会有哪些选项。