问题描述
我想读其中新线由表示一个巨大的文件no space
, comma
, new line character
,或任何东西。
示例: line1element1,line1element2,line1element3,line2element1,line2element2,依此类推。
该文件是一个csv
,我正在阅读,如下所示:
public static void main(String[] args) throws Exception {
ArrayList<String> list = new ArrayList<>();
String element;
String filename = "E:\\csv.csv";
Scanner scanner = new Scanner(new File(filename));
scanner.useDelimiter(",");
for (int i = 0; i < 50; i++) {
element = scanner.next();
list.add(element);
}
System.out.print(list);
}
这会引起问题,因为element50
中的element50
与element51
组合在一起,尽管它应该是新行。
1楼
使用BufferedReader,而不是Scanner
File f= ...;
BufferedReader br = new BufferedReader(new FileReader(f));
String line;
while ((line = br.nextLine()) != null) {
String[] columns = line.split(",");
}
2楼
为什么不从Apache的共享或OpenCSV使用CSVParser?
这里的例子:
如果您坚持要手动执行此操作,请使用BufferedReader作为其他注释。
3楼
为此使用BufferedReader
:
String filename = "E:\\csv.csv";
BufferedReader fileReader = null;
//Delimiter used in CSV file
final String DELIMITER = ",";
String line = "";
//Create the file reader
fileReader = new BufferedReader(new FileReader(filename ));
//Read the file line by line
while ((line = fileReader.readLine()) != null)
{
//Get all tokens available in line
String[] tokens = line.split(DELIMITER);
for(String token : tokens)
{
//Print all tokens
System.out.println(token);
}
}
4楼
从您的描述看来,您的文件似乎没有每一列的标题。 使用为您执行此操作-它比Commons CSV和OpenCSV快3倍,并且具有许多功能。
// you have many configuration options here - check the tutorial. By default values are trimmed and blank lines skipped.
CsvParserSettings settings = new CsvParserSettings();
CsvParser parser = new CsvParser(settings);
List<String[]> allRows = parser.parseAll(new FileReader(new File("/path/to/your/file.csv")));
披露:我是这个图书馆的作者。 它是开源且免费的(Apache V2.0许可证)。