2010-09-25 23 views
1

我正在編寫一個代碼,收集每個買方的所有信用卡信息並將其存儲在文件中。我使用將信息存儲在一個文件的格式是:現在關於Java中的文件訪問查詢

[Credit Card Number] | [User Name] | [Street Address] | [Zipcode] | @ 
[Credit Card Number] | [User Name] | [Street Address] | [Zipcode] | @ 
..... 

Credit Card Number<User Name><Street Address><Zipcode>是實際的UI字段。我捕獲這些信息,使用字段分隔符「|」並在我的代碼中記錄分隔符「@」,以便我可以在需要時訪問字段和記錄。但這只是我的一個邏輯,現在我開始懷疑這是否會起作用,主要是由於Java中的File API。即使在使用分隔符後,也沒有辦法讓我訪問記錄中的特定字段。我也檢查了RandomAccessFile API。

任何人都可以請建議我其他可能的方法來解決這個問題?

我想區分記錄和各種記錄之間的字段,以便我可以執行諸如搜索信用卡號爲XXX的用戶等操作並提取詳細信息。

+0

請注意信用卡號碼!如果您要存儲真實的信用卡號碼,則必須對其進行加密(請參閱http://www.pcisecuritystandards.org)。 – tangens 2010-09-25 22:56:04

+0

簡單的readline方法怎麼樣,把它全部放到數組中,然後對數組中的字符串使用split()函數,這樣你就可以在collection/arrays/objects中搜索並搜索所有東西... – lisak 2010-09-25 22:56:32

回答

1

無論是在組合使用BufferedReader#readLine()讀它逐行與各種String方法如split()使用java.util.Scanner,也看到此tutorial。您可以在List<Data>中收集它們,其中Data是您自己的包含單行字段的類。通過這種方式,您可以在閱讀文件後訪問「各種」記錄。

作爲替代方案,您也可以將其全部存儲在SQL數據庫中。通過這種方式,您可以使用SQL language輕鬆選擇記錄。或者如果它真的需要是一個文件,你也可以考慮使用CSV或XML格式。對於這些格式,可以使用方便的API來處理它們。

+0

謝謝這麼多的投入。哪些API處理創建CSV文件? – 2010-09-26 00:29:01

+0

其中有很多。 [SuperCSV](http://supercsv.sourceforge.net/),[OpenCSV](http://opencsv.sourceforge.net/),[JavaCSV](http://sourceforge.net/projects/javacsv/),等你也可以[homegrow](http://stackoverflow.com/questions/3225108/issues-converting-csv-to-xls-in-java-only-core-java-experience-needed-question/3225146#3225146 )它。 – BalusC 2010-09-26 01:01:52

5

不,你要問什麼(隨機訪問變長字段)通常是不可能的。有辦法破解它,但它會比它的價值更醜陋,更麻煩。你堅持按順序閱讀整個文件,掃描你想要的記錄。您可能想要研究更具結構化的方法來存儲數據,無論是通過固定長度的記錄還是(首選)數據庫,例如SQLite

所有這一切說,以這種方式存儲信用卡是一個很大的禁忌。你提出這個問題的事實表明,你應該設計一個處理信用卡的系統,而不是而不是。有關爲什麼這是一個壞主意的廣泛討論,您應該閱讀PCI合規性。這裏的a starter link,你應該在維基百科和StackOverflow上搜索一下,爲什麼這是一個非常糟糕的主意。

+0

非常感謝您的輸入! – 2010-09-26 00:29:23

2

這可能是一個學生項目。

我會學會使用MySQL之類的數據庫之前,我實現了這樣的事情。

但是,如果你對一個文件做了死的事,是的,只是把它讀入內存。一張地圖會非常好,信用卡號碼是散列鍵。

+0

我在想同樣的方法;) – jjczopek 2010-09-25 23:02:44

1

如果我在你的鞋子裏,我會擴展HashMap,其中信用卡號碼將成爲我的鑰匙,並將其他細節包含在一個bean中,並將其作爲值存儲在地圖中。

我會實現從文件加載數據(逐行閱讀,用正則表達式解析)並將數據保存到文件中的方法。從文件加載所有數據(緩存)將使我能夠自由修改數據並在必要時進行保存。我認爲它會提高性能,因爲不需要隨時讀取文件 - 只需修改內存對象即可。