当前位置: 代码迷 >> java >> 使用Java读取文件时如何处理换行
  详细解决方案

使用Java读取文件时如何处理换行

热度:15   发布时间:2023-07-27 09:16:38.0

我想读其中新线由表示一个巨大的文件no spacecommanew 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中的element50element51组合在一起,尽管它应该是新行。

使用BufferedReader,而不是Scanner

File f= ...;
BufferedReader br = new BufferedReader(new FileReader(f));
String line;
while ((line = br.nextLine()) != null) {
  String[] columns = line.split(",");
}

为什么不从Apache的共享或OpenCSV使用CSVParser?

这里的例子:

如果您坚持要手动执行此操作,请使用BufferedReader作为其他注释。

为此使用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);
    }
}

从您的描述看来,您的文件似乎没有每一列的标题。 使用为您执行此操作-它比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许可证)。

  相关解决方案