Запрос на доступ к файлам в Java - PullRequest
1 голос
/ 26 сентября 2010

Я пишу код, который собирает всю информацию о кредитной карте каждого покупателя и хранит ее в файле.Формат, который я использую для хранения информации в файле:

[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 и извлечение информации.

Ответы [ 4 ]

5 голосов
/ 26 сентября 2010

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

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

2 голосов
/ 26 сентября 2010

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

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

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

1 голос
/ 26 сентября 2010

Если бы я был на вашем месте, я бы расширил HashMap, где номером моей кредитной карты был бы мой ключ, обернул другие детали в боб и сохранил бы их как значение на карте.

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

1 голос
/ 26 сентября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...