Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как правильно прочитать файл


Автор: barin_Student 4.4.2008, 06:40
Собственно имеется файл , он будет хранилищем , то есть в него периодически будет писать в конец файла , и браться с начала(при этом еще забранное удаляться должно) , как мне правильно реализовать обращение к файлу(посколько несколько потоков будет одновременно работать с ним), и как мне считывать первую строку и переписывать файл , чтоб после считывания и удаления самой верхней строки файл переписывался со сдвигом(аналог очереди).. Пока пытаюсь что нить сделать мало что выходит... Буду благодарен за помощь. smile 

Автор: Aikus 4.4.2008, 08:10
Если не секрет, обязательно делать это из одного файла? Может лучше будет сделать временный, или вобще использовать БД?

Автор: barin_Student 4.4.2008, 08:27
Ну собственно я немного концепцию требований передумал , решил я не использовать файл как переменную , а просто использовать как хранилище данных при экстренном закрыти программы, функции которые надо реализовать для данного файла:
1)Запись в файл определенного формата - зделанно.
2)Чтение из файла с начала(с самого верха), удаление прочтенной записи, - пока еще не знаю какой алгоритм получиться...
3)Ну и собственно парсинг прочтенных строк из файла и приведение к нужному типу данных - выполненно..
Так что остался только вопрос номер 2 , если кто уже реализовывал это или знает как , то от помощи не откажусь... smile  

Автор: barin_Student 4.4.2008, 08:53
Вопщем как правильно прочитать файл и как удалить из файла запись?
 smile 

Автор: math64 4.4.2008, 09:02
Можно каждые сутки (час, минуту - в зависимости от объёма данных) создавать новый файл и удалять полностью прочтённые.

Автор: barin_Student 4.4.2008, 09:06
Нет , так мне не надо, я записываю строки содержищие данные, которые я должен отправить, но не отправил , так как это стояло в очереди , но программа остановилась по разным причинам, при старте я проверю есть ли записи в файле , то что есть ставлю в очередь и отправляю(паралельно удаляю ту запись , которая уже прочитана . Вот как мне надо. 

Автор: math64 4.4.2008, 09:22
Можно каждая запись - один файл
Можно в записи оставить место для метки "прочтенная"
Можно создать файл опредённого размера и по достижении конца начинать писать в начало (размер файла должен быть достаточен чтобы хранить все непрочтённые записи)
Удалять же прочтённые записи переписывая непрочтённые в начало файла - нерентабельно.

Автор: barin_Student 4.4.2008, 09:29
Код

Удалять же прочтённые записи переписывая непрочтённые в начало файла - нерентабельно. 

Знаю , но именно так мне надо..Вот как сделать это пока не знаю.

Добавлено через 2 минуты и 12 секунд
Скажем а в файл объект писать можно и читать как объект?
Например PDU(из SMPP протокола) помойму же возможно?

Автор: math64 4.4.2008, 11:10
Цитата(barin_Student @  4.4.2008,  09:29 Найти цитируемый пост)
Скажем а в файл объект писать можно и читать как объект?Например PDU(из SMPP протокола) помойму же возможно?

Это без разницы чем ты пишешь.
Допустим все записи одной длины. Первый байт - маркер прочтения.
Одна из ниток ищет прочтённую запись, ищет непрочтённую за ней и переписывает её выше, а её первоначальное место маркирует как прочтённое. Если последняя запись в файле прочтённая, размер файла сокращается.
После  наведения порядка эта нить засыпает и просывается при чтении записи. И разумеется, доступ к файлу во время его дефрагментации должен быть синхронизирован.

Автор: barin_Student 4.4.2008, 11:20
Счас пробую разные методы , чуть позже отпишусь как зделал,  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)