Java中的缓冲读取器,行数,拆分,解析

时间:2018-12-07 15:32:24

标签: java arrays parsing split bufferedreader

实际上,我被分配了一个任务,其中有一个xyz.txt / CSV文件,该文件基本上将包含数值,我应该将其传递给BUFFERED READER,然后拆分这些值并最终解析它们。

所以我有一个Java代码可以帮助我解决这个问题。

package javaapplication12;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;

public class JavaApplication12 {   

    public static void main(String[] args) {

        String count= "F:\\Gephi\\number.txt";            
        BufferedReader br = null;
        FileReader fr = null;

        try {           
            fr = new FileReader(count);
            br = new BufferedReader                       

            // AT THIS POINT THERE SHOULD BE SOME THING THAT COUNTS NUMBER OF LINES USING COUNT++ OR SOMETHING LIKE THIS//    
            String sCurrentLine;    
            while ((sCurrentLine = br.readLine()) != null) {
                System.out.println(sCurrentLine);
            }                            
        }             
        catch (IOException e) {
            e.printStackTrace();
        }
        finally {
                try {
                    if (br != null)
                       br.close();

                    if (fr != null)
                       fr.close();
                } 
                catch (IOException ex) {
                    ex.printStackTrace();
                }
        }            
     }
}
                // COMING TO THIS POINT THE ABOVE VALUES OF .TXT FILE SHOULD BE SPLIT USING SPLIT PARAMETER//
               // AFTER SPLITTING THE SPLIT VALUE SHOULD BE KEPT IN AN ARRAY AND THEN EVENTUALLY PARSED//

或者,如果有人可以用上述问题的另一种方式重写代码,也将不胜感激。

1 个答案:

答案 0 :(得分:2)

这是我的Java 8解决方案:

 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
 import java.util.List;
 import java.util.stream.Collectors;

 public class BR {

 public static void main(String[] args) {
    String fileName = "br.txt";
    //for the csv format
    String regex = ", ";
    try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
        List<String[]> lines = br.lines()
                .map(line -> line.split(regex))
                .collect(Collectors.toList());

        parse(lines);
    } catch (IOException e) {
        e.printStackTrace();
    }

}

private static void parse(List<String[]> lines) {
    //Do your stuff here
}

 }

由于BufferedReader实现了AutoCloseable(一个接口),因此BufferedReader的初始化在try块中(这种方法称为带资源尝试),因此,如果抛出异常,则阅读器将关闭。

br.lines()方法返回文件中的所有行。 在map函数中,您传递的是lambda中的rad线。该行使用split变量进行拆分(对于CSV格式为','),并将其返回并收集。

结果是一个String数组列表,可以在map函数的主体中对其进行更改。

为进一步说明,我建议您检查一些Java 8教程,您将完全了解发生了什么。

此解决方案可能不适合您的知识水平(我想),但希望它能激发您检查一些更现代的方法。

今天愉快。