2010-09-25 60 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中,并将其作为值存储在地图中。

我会实现从文件加载数据(逐行阅读,用正则表达式解析)并将数据保存到文件中的方法。从文件加载所有数据(缓存)将使我能够自由修改数据并在必要时进行保存。我认为它会提高性能,因为不需要随时读取文件 - 只需修改内存对象即可。