2010-09-25 4 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> фактические поля пользовательского интерфейса. Я беру эту информацию, использую полевой разделитель «|» и разделитель записей «@» в моем коде, чтобы я мог получать доступ к полям и записям по мере необходимости. Но это всего лишь логика, и теперь я начал задаваться вопросом, будет ли это работать, в первую очередь из-за API файлов в Java. Нет метода, который позволяет мне получать доступ к определенным полям в записи, даже после разделителя. Я также проверил API RandomAccessFile.

Может ли кто-нибудь предложить мне другие возможные подходы к этой проблеме?

Я хочу различать поля в записи и между различными записями, чтобы я мог выполнять такие операции, как поиск пользователя с номером кредитной карты = XXX и вытащить детали.

+0

Будьте осторожны с номерами кредитных карт! Если вы храните реальные номера кредитных карт, вам необходимо их зашифровать (см. Http://www.pcisecuritystandards.org). – tangens

+0

Что касается простого метода readline, поместить его в массив, а затем использовать функцию split() в строках внутри массива, таким образом вы могли бы использовать все это в коллекциях/массивах/объектах и ​​поиске и т. Д. ... – lisak

ответ

1

Либо использовать BufferedReader#readLine() читать построчно в сочетании с различными методами String как split(), или использования java.util.Scanner, смотрите также эту tutorial. Вы можете собрать их в List<Data>, где Data - это ваш собственный класс, содержащий поля одной строки. Таким образом, вы можете получить доступ к «различным» записям после прочтения файла.

В качестве альтернативы вы также можете просто сохранить все это в базе данных SQL. Таким образом, вы можете легко выбирать записи, используя SQL language. Или, если он действительно должен быть файлом, вы также можете рассмотреть использование CSV или XML-формата. Для этих форматов доступны удобные API для их обработки.

+0

Спасибо так много для ввода. Какие API имеют дело с созданием файла CSV? –

+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

5

Нет, то, что вы просите (случайный доступ к полям переменной длины), вообще невозможно. Есть способы взломать его, но это будет уродливо и больше проблем, чем того стоит. Вы застряли, просматривая весь файл последовательно, просматривая нужную запись. Вероятно, вы захотите изучить более структурированный подход к хранению данных, будь то записи фиксированной длины или (предпочтительная) база данных, скажем SQLite.

Все, что сказал, хранение кредитных карт таким образом, как это, большой нет-нет. Тот факт, что вы задаете этот вопрос, указывает на то, что вы должны не создавать систему для обработки кредитных карт. Для подробных обсуждений о том, почему это плохая идея, вы должны ознакомиться с соблюдением PCI. Вот a starter link, и вы должны сделать некоторые поиски в Wikipedia и StackOverflow, потому что это действительно плохая идея.

+0

Большое спасибо за вход !! –

2

Это, вероятно, студенческий проект.

Я бы научился использовать базу данных, такую ​​как MySQL, прежде чем реализовал что-то подобное.

Но если вы мертвы, сделав это с файлом, да, просто прочитайте его в памяти. Карта будет очень приятной, номер кредитной карты будет хеш-ключом.

+0

Я так же думаю;) – jjczopek

1

Если бы я был в Твоих туфлях, я бы расширил HashMap, где номер кредитной карты был бы моим ключом, и обернуть другие детали в bean-компонент и сохранить его как ценность на карте.

Я бы использовал методы для загрузки данных из файла (чтение строки за строкой, синтаксический анализ с регулярным выражением) и сохранение данных в файл. Загрузка всех данных из файла (кэширование) даст мне возможность свободно изменять данные и сохранять при необходимости. Я думаю, что это увеличит производительность, так как нет необходимости постоянно читать файл - просто модифицировать объект памяти.

Смежные вопросы