2015-07-13 31 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'關閉你的資源。 –