2015-07-13 75 views
0

我想读取定界符分隔或固定宽度的文件(定义的布局),并且希望获得类似于Resultset的内容,通过它我可以迭代记录。从数据文件中获取类似于Resultset的内容

有没有这样做的可靠库?如果没有,那么任何人都可以请我建议我应该怎么做?示例代码片段对我非常有帮助。

+0

使用['Files.lines'](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#lines-java.nio.file .Path-)来获得线路的“流”。将每行处理为表示该行的“对象”。循环... –

回答

0
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

+0

我将不得不投票,因为它没有正确关闭'Stream'并且有一个空的'catch'。虽然前者是一个严重的错误,并且在javadoc中明确提到:如果需要及时处理文件系统资源,应该使用try-with-resources构造来确保在流操作完成后调用流的close方法后者在设计教学的代码中是完全不可原谅的。总是,至少添加一个'ex.printStackTrace(System.err)'。 –

1

您可以使用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("|"); 

} 
} 
+0

请确保你使用'try-with-resources'关闭你的资源。 –