我想讀取定界符分隔或固定寬度的文件(定義的佈局),並且希望獲得類似於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-)來獲得線路的「流」。將每行處理爲表示該行的「對象」。循環... –