2013-05-01 3 views
0

У меня есть программа, которая пройдет и создаст несколько разных экземпляров класса. Я хочу написать подробности каждого экземпляра в файл с помощью DataOutputStream (это необходимое упражнение, я рассмотрю другие способы сделать это позже), но проблема в том, что я заметил, что DataOutputStream перезаписывает файл каждый раз, когда новый экземпляр создано и написано. Моя первая идея была каждый раз, когда был написан новый экземпляр, сначала используя DataInputStream, чтобы получить то, что находится в файле, сохранить его, а затем переписать его с новым экземпляром. Похоже, что это может запутаться очень быстро. Что было бы лучше всего для этого? Заранее спасибо.Управление байтами файлов с помощью DataOutput/InputStream

EDIT: Я постараюсь быть более конкретным в отношении того, что я пытаюсь сделать здесь. Когда я беру класс, который хочу записать в файл, сначала я буду использовать dataInputStream.readFully, чтобы получить все в файле. Я понимаю, что все байты хранятся в файле и сохраняются в массиве. Я хотел бы сравнить это с экземпляром класса, и если экземпляр совпадает с чем-то уже в файле, не выводите этот конкретный экземпляр (потому что он уже есть) в файл. В противном случае добавьте файл.

ответ

0

Используйте конструктор FileOutputStream(File file, boolean append) при открытии файла для записи. Например:

File f = new File("C:\data.txt"); 
FileOutputStream fos = new FileOutputStream(f, true); // open file for appending 
DataOutputStream dos = new DataOutputStream(fos); 
// anything written to dos after this point will be appended 

Если вам просто нужно сериализовать ваши объекты, я настоятельно рекомендую использовать JAXB или другую сериализацию/сортировочную API вместо того чтобы изобретать колесо. Вы можете сэкономить массу времени.

+0

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

+0

Это чисто добавляет к самому концу существующего файла. Если у вас есть что-то еще, я бы предложил изменить ваш вопрос или задать новый вопрос, включая более подробное объяснение ожидаемого или желаемого поведения (псевдокод или код также помогут). Тем не менее, вы также можете изучить JAXB или JavaBeans Serialization или другой аналогичный API, так как они уже решили проблему с корнем, которую вы пытаетесь решить (сериализация данных на диск). – rob

+0

Я бы полностью использовал сериализацию, но это конкретное упражнение, с которым я пытаюсь работать. Я отредактировал вопрос, чтобы лучше объяснить и объяснить. благодаря – Benny

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