您好我正在尝试从.csv文件中获取特定数据,而我使用的代码是
import java.io.BufferedReader;
import java.io.FileReader;
public class InsertValuesIntoTestDb {
public static void main(String[] args) throws Exception {
String splitBy = ",";
BufferedReader br = new BufferedReader(newFileReader("test.csv"));
String line = br.readLine();
while ((line = br.readLine()) !=null) {
String[] b = line.split(splitBy);
System.out.println(b[0]);
}
br.close();
}
}
和.csv看起来像
a,f,w,b,numinst,af,ub
1RW,800,64,22,1,48:2,true
1RW,800,16,39,1,48:2,true
1RW,800,640,330,1,48:2,true
1RW,800,40,124,1,48:2,true
1RW,800,32,104,1,48:2,true
1RW,800,8,104,1,48:2,true
1R1W,800,65536,39,1,96:96,true
1R1W,800,2048,39,1,96:96,true
1R1W,800,8192,39,1,48:48,true
使用上面的代码我只能打印列' a'而我的o / p看起来像
a
1RW
1Rw
1Rw
像这样,但我怎么能打印列f,w,b ??
我的输出应该是
f w b
800 64 22
800 64 22
800 64 22
由于
答案 0 :(得分:1)
只需将System.out.println(b[0]);
更改为System.out.println(b[1]+" "+b[2]+" "+b[3]);
答案 1 :(得分:0)
要在一行中显示所有值,您可以像这样更改while循环:
while ((line = br.readLine()) !=null) {
String[] b = line.split(splitBy);
if (b.length > 3) {
System.out.println(b[1] + ' ' + b[2] + ' ' + b[3] + ' ');
} else {
System.err.println("Not enough values in line " + line);
}
}
首先检查,如果至少有4列,然后打印第2,第3和第4个值。
希望这有帮助。
答案 2 :(得分:0)
使用String.split解析CSV不仅是不可靠的,而且速度也很慢。您在解析可能包含逗号字符,行分隔符等的值时遇到问题。此外,您需要处理具有不同列数的行以避免 ArrayIndexOutOfBoundsException 。
使用CSV解析器。 uniVocity-parsers可让您轻松获取CSV列:
CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.setHeaderExtractionEnabled(true);
parserSettings.selectFields("f", "w", "b");
CsvParser parser = new CsvParser(parserSettings);
List<String[]> parsedRows = parser.parseAll(newFileReader("test.csv"));
如果您要解析CSV并获取每列的值列表,可以使用RowProcessor并执行此操作:
CsvParserSettings parserSettings = new CsvParserSettings(); //many options here, check the documentation.
parserSettings.setHeaderExtractionEnabled(true); // gets the headers from the first row
// To get the values of all columns, use a column processor
ColumnProcessor rowProcessor = new ColumnProcessor();
parserSettings.setRowProcessor(rowProcessor);
CsvParser parser = new CsvParser(parserSettings);
//This will parse all rows and submit them to the column processor
parser.parse(newFileReader("test.csv"));
//Finally, we can get the column values:
Map<String, List<String>> columnValues = rowProcessor.getColumnValuesAsMapOfNames();
默认情况下会跳过空行(如果需要,则将解析器配置为不跳过空行)。 columnValues 地图中的列表将具有完全相同的大小,如果您的输入行的列数少于其他列,则相应的值将为 null 。
披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)。