2012-05-16 47 views
0

我有一個讀取CSV文件並將其內容存儲到數據庫中的代碼。代碼定期運行,它應該只讀取新添加的文件。我想在讀取每個文件的第一行後添加一個標誌,但是這需要逐個加載所有文件,並檢查它們的第一行以決定應該讀取哪一個文件。 有沒有更好的做法呢?我如何標記讀取的文件以避免在java中再次讀取它們?

+0

只要將讀取的文件移動到'done'文件夾,新文件仍保留在'new'文件夾中,問題是什麼? –

+0

@Rosdi它是一個好主意,如果所有的文件都在你的文件系統中,但問題是我不確定我是否有權限創建和維護包含文件的目錄中的文件夾和文件(因爲它們不是基本上在同一臺機器上)。 – Sami

回答

0

如果您使用的是Windows文件系統(FAT,NTFS),則會出現一個名爲「存檔」的文件屬性用於此目的。對文件進行任何更改都會導致設置,並且可以在將其添加到數據庫後將其清除。

對於跨平臺的目的,最好的選擇是跟蹤哪些文件已經在數據庫中查看過(也可能是最後修改的日期),然後可以在查看目錄列表時查看必須打開每個文件。

+0

感謝您的回答。我會去DB中存儲處理過的表名以獲得跨平臺支持。 – Sami

+0

@OrangeDog ..我發現了一些稱爲用戶定義的文件屬性(http://docs.oracle.com/javase/tutorial/essential/io/fileAttr.html#user)你認爲有可能使用它們來標記讀取文件?試圖在網上找到它,如果它用於這個目的但找不到任何東西。 – Sami

+0

正如它所說的,你可能會需要重新安裝文件系統。對於使用你的系統的任何人來說,這是一個相當高的訪問需求,並且與DB解決方案不同,這些屬性可能難以在代碼之外查看/管理。 – OrangeDog

0

還有一種更好的方法:在數據庫表中存儲您處理的所有文件(的名稱),並使用該表來決定是否處理文件。

1

在同一directorywhich一個索引文件保存讀取文件的列表,

這種方式,你只需要讀取該文件,以決定

0

不知道很多關於你的情況,但你問DB存儲哪些文件,並只處理那些不存儲的文件?或者您可以在下次運行代碼時將已處理文件的列表存儲在內存中?

0

兩個解決方案從我:

  1. 複製處理的文件到另一個目錄。
  2. 用散列創建一個索引文件文件的代碼(冷名字),你將能夠檢查文件的位置。
0

儘量不要篡改這些文件。這是一個壞主意。 嘗試set some property of the file以表明其已處理。 所以你可以快速區分它要讀取/處理的文件。

相關問題