Джава:Самый эффективный способ хранения/извлечения информации о тренировках из файла?
Вопрос
Я работаю над проектом Java для класса, который хранит информацию о тренировках в плоском файле.Каждый файл будет содержать информацию об одном упражнении (BenchPress.data), содержащую время (в миллисекундах с момента начала), вес и количество повторений.
Пример:
1258355921365:245:12
1258355921365:245:10
1258355921365:245:8
Какой наиболее эффективный способ хранения и извлечения этих данных?Он будет отображаться в виде графика и просматриваться, чтобы ограничить упражнения определенными датами или диапазонами дат.
У меня была идея записать самую свежую информацию в начало файла, а не добавлять ее в конец.Таким образом, когда я начну читать сверху, у меня будет самая последняя информация, которая будет соответствовать большинству поисковых запросов (предположение).
Однако нет никакой гарантии относительно порядка дат.Пользователь может ввести упражнения на сегодня, а затем войти и ввести упражнения за прошлую неделю по любой причине.Должен ли я нажать кнопку сохранения, чтобы упорядочить всю информацию по дате?
Стоит ли мне идти совершенно в другом направлении?Я знаю, что база данных была бы идеальна, но это групповой проект, и управление установкой базы данных и синхронизацией данных между нами было бы не идеальным.У остальных нет опыта работы с базами данных, и это затруднит выставление оценок.
Так что спасибо за любые советы или предложения.
-Джон
Решение
Не усложняйте ситуацию.Если вы не имеете дело с миллионом записей, вы можете просто прочитать все это в памяти и отсортировать по своему усмотрению.И всегда добавляйте записи в конце, так вы с меньшей вероятностью повредите файл.
Другие советы
Для простых проектов использование встроенного типа JavaDB / Апач Дерби может быть хорошей идеей.Конфигурация БД абсолютно минимальна, и в вашем случае вам может понадобиться максимум 2 таблицы (Пользовательская и Тренировочная).Экспорт данных в файл также довольно прост для синхронизации между членами команды.
Однако, как отметил yu_sha, если вы не ожидаете, что у вас будет большой набор данных (для запуска на ПК, > 50000), вы можете просто использовать файл и прочитать все в память.
Прочитайте каждую строку через BufferedReader
и проанализировать с помощью StringTokenizer
.Глядя на данные, я бы, скорее всего, сохранил массив полей в List
которые можно повторять и сортировать в соответствии с вашими предпочтениями.
Если вам необходимо сохранить файл в этом формате, вам, вероятно, лучше всего просто прочитать его целиком в памяти при запуске и сохранить его в TreeMap или какой-либо другой отсортированной карте с возможностью поиска.Затем вы можете использовать удобные методы TreeMap, такие как потолокКлюч или аналогичный FloorKey для поиска совпадений в определенные даты/время.
Использовать плоский червь, библиотека Java, позволяющая анализировать и создавать плоские файлы.Опишите формат с помощью простого файла определения XML, и все готово.