2009-11-20 27 views
0

我正在開發一個用於將鍛鍊信息存儲在平面文件中的Java項目。每個文件將有一個練習(BenchPress.data)的信息,其中保存時間(自紀元以來的毫秒數),重量和重複。Java:最有效的方式來存儲/檢索文件中的鍛鍊信息?

例子:

1258355921365:245:12

1258355921365:245:10

1258355921365:245:8

什麼是存儲和檢索該數據的最有效方法是什麼?它將被繪製和搜索,以限制練習到特定的日期或日期範圍。

我的想法是寫最新的信息到文件的頂部,而不是在最後追加。這樣,當我從頂端開始閱讀時,我將獲得最新的信息,這些信息將與大多數搜索(假設)相匹配。

雖然沒有保證日期的順序。用戶可以今天進入練習,然後進入並進入最後幾周練習,無論出於何種原因。我應該在保存時點擊以在日期前訂購所有信息嗎?

我應該走完全不同的方向嗎?我知道一個數據庫將是理想的,但這是一個小組項目,管理數據庫安裝和我們之間的數據同步並不理想。其他人對數據庫沒有經驗,會使分級困難。

所以,感謝您的任何意見或建議。

-John

回答

6

不要過分複雜的事情。除非您處理的是百萬條記錄,否則您可以將整個內容讀入內存並按照您喜歡的方式進行分類。並且總是在最後添加記錄,這樣您不太可能損壞文件。

1

在讀經BufferedReader每一行與StringTokenizer解析。看看這些數據,我可能會在List中存儲一組字段,這些字段可以根據您的偏好進行迭代和排序。

+0

爲什麼有一組字段?我會說讓一個類表示數據並將對象存儲在列表中。 – ColinD 2009-11-20 22:36:54

+0

爲了提供自己的排序,最好使用一個像列表(而不是ArrayList)的類似數組的結構來保證字段順序。我建議'收藏集',因爲我會假設這是教練希望看到:) – Xailor 2009-11-20 23:28:28

0

如果您必須以這種格式存儲文件,您最好在啓動時將整個內容讀入內存,並將其存儲在TreeMap或其他排序的可搜索地圖中。然後,您可以使用TreeMap的便利方法,例如ceilingKey或類似的floorKey來查找某些日期/時間附近的匹配。

3

對於簡單的項目,使用嵌入像JavaDB/Apache Derby可能是一個好主意。數據庫的配置是絕對最小的,在您的情況下,您最多隻需要2個表格(用戶和鍛鍊)。將數據導出到文件對於團隊成員之間的同步來說也相當簡單。

正如yu_sha指出的那樣,除非期望有一個大的數據集(在PC上運行,> 50000),您可以使用該文件並將所有內容讀入內存。

+0

+1,使用數據庫可以幫助您避免在需要向文件格式添加新列時出現中斷。 – 2009-11-20 23:21:10

0

使用flatworm,允許解析和創建平面文件的Java庫。用一個簡單的XML定義文件來描述格式,然後就可以了。

相關問題