我想读取定界符分隔或固定宽度的文件(定义的布局),并且希望获得类似于Resultset的内容,通过它我可以迭代记录。从数据文件中获取类似于Resultset的内容
有没有这样做的可靠库?如果没有,那么任何人都可以请我建议我应该怎么做?示例代码片段对我非常有帮助。
我想读取定界符分隔或固定宽度的文件(定义的布局),并且希望获得类似于Resultset的内容,通过它我可以迭代记录。从数据文件中获取类似于Resultset的内容
有没有这样做的可靠库?如果没有,那么任何人都可以请我建议我应该怎么做?示例代码片段对我非常有帮助。
public static Stream<String> lines(Path path)
throws IOException
从文件中读取所有行作为Stream。使用UTF-8字符集将文件中的字节解码为字符。
此方法的工作方式,如果调用它,相当于计算表达式:
Files.lines(path, StandardCharsets.UTF_8)
参数: 路径 - 将文件路径
返回:从文件中的行作为流
抛出:
IOException异常 - 如果发生在打开文件
抛出:SecurityException的I/O错误 - 在默认提供的情况,并且安装了安全管理,该checkRead方法被调用来检查读取访问文件。
由于: 1.8
Files.lines(Path)
需要一个Path
参数,返回Stream<String>
。 这是Java 8,因此您可以使用lambda表达式或方法引用来提供Consumer
参数。
public class FixedWidthFile {
public static void main(String JavaLatte[]) {
Path path = Paths.get("/home/sample.txt");
try {
Stream<String> lines = Files.lines(path);
lines.forEach(s -> System.out.println(s));
} catch (IOException ex) {
}
}
}
参考:Class Files
我将不得不投票,因为它没有正确关闭'Stream'并且有一个空的'catch'。虽然前者是一个严重的错误,并且在javadoc中明确提到:如果需要及时处理文件系统资源,应该使用try-with-resources构造来确保在流操作完成后调用流的close方法后者在设计教学的代码中是完全不可原谅的。总是,至少添加一个'ex.printStackTrace(System.err)'。 –
您可以使用Java IOS迭代在文本文件中的每一行,然后实现自己的逻辑分割线,做任意的。
public static void main(String args[]) throws Exception {
//input file
File inputFile = new File("c:/hadoop/sample.txt");
BufferedReader br = new BufferedReader(new FileReader(inputFile));
String s = null;
while ((s = (br.readLine())) != null) {
//check each line and do the logic may be split or based on the requirement
String cols[] =s.split("|");
}
}
请确保你使用'try-with-resources'关闭你的资源。 –
使用['Files.lines'](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#lines-java.nio.file .Path-)来获得线路的“流”。将每行处理为表示该行的“对象”。循环... –