удалить одну строку в текстовом файле?

#java #java-me #rms

#java #java-me #rms

Вопрос:

Я создал приложение j2me для чтения и записи текстового файла

теперь во время чтения я читаю одну строку и отправляю ее на сервер. после этого я хочу удалить эту строку из текстового файла.

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

Я не думаю, что это хороший подход. есть ли какой-либо другой способ сделать это???

Редактировать:

на самом деле проблема в том, что одно приложение записывает некоторые данные в текстовый файл, а другое мое приложение считывает одну строку, отправленную на сервер, и удаляет эту строку.

Теперь, если я использую такой подход, как копирование нового объекта и удаление файла и запись нового файла с новым объектом, тогда я найду одну проблему

если файл удален, то первое приложение не может найти этот файл, поэтому оно может создать новый файл только с одними данными, а второе приложение создаст новый файл на основе нового объекта, поэтому мои данные будут потеряны

Редактировать:

Даже я пытался сделать то же самое с RMS, но когда оба приложения обращаются к одному и тому же RMS в то время, все данные в файле RMS очищаются. Первое приложение открывает RMS для записи, а второе — для синхронизации и удаления. но в то время, когда оба открывают RMS, все данные очищаются.

Возможно ли установить блокировку для файла RMS из одного приложения??

Комментарии:

1. Может быть, это не очень хорошая идея обмениваться данными с помощью текстовых файлов? Почему вы не используете RMS. Одно приложение создает записи в RMS. Второе чтение и удаление их.

2. @oxigen я пробовал это, но обнаружил проблему, когда оба приложения обращаются к одному и тому же RMS в то время, когда все мои данные теряются. вот почему я пытаюсь использовать file. смотрите мою правку.

3. Рассматривали ли вы возможность использования встроенной базы данных, такой как SQLite?

4. @Cipi пожалуйста, прочтите мою последнюю правку, касающуюся проблемы в RMS

5. @Papuass SQLite не поддерживается в J2ME, иначе это решит все мои проблемы.

Ответ №1:

Нет, вот как вы это делаете.

Вы не можете удалить строку из начала файла. Вам нужно было бы переписать файл без этой строки.

(Обратите внимание, что это не относится конкретно к java)

Комментарии:

1. Эмм … вы действительно не можете сделать то, что пытаетесь сделать.

2. @Mihir: RMS — это то, что вам нужно.

Ответ №2:

По мере вставки записей я создавал один файл для одной записи в одной конкретной папке, теперь этот файл считывается фоновым приложением и отправляется на сервер, который будет удален приложением.

таким образом, это решает проблему параллелизма при чтении и записи файла.

я знаю, что это не очень хороший подход, но я не нашел другого хорошего подхода.

Ответ №3:

В большинстве файловых систем нет механизма для удаления содержимого посередине. (уверен, что в j2me так и есть). Итак, стандартная практика — открыть новый файл; скопируйте старый файл до того места, где заканчивается ненужная строка, пропустите ее, затем скопируйте остальную часть файла. Я знаю, это звучит неэлегантно, но так оно и есть 🙂