实际上,我被分配了一个任务,其中有一个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//
或者,如果有人可以用上述问题的另一种方式重写代码,也将不胜感激。
答案 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教程,您将完全了解发生了什么。
此解决方案可能不适合您的知识水平(我想),但希望它能激发您检查一些更现代的方法。
今天愉快。