2014-12-11 4 views
0

Я хотел бы обновить CSV-файл, содержащий 1 миллион записей. Я хочу обновить в том же файле, не создавая другого файла. Я использую Opencsv. Я не могу найти способ обновить CSV-файл. Если кто-нибудь сможет мне помочь, это будет здорово. Для уточнения скажем эти небольшие .csv файл:Обновление файла CSV Java

Initial CSV файл:

a,b,c,d 
1,2,3,4 
5,6,7,8 
12,13,14,15 

Желаемая CSV файл:

a,b,c,d,e,f 
1,2,3,4, ,17 
5,6,7,8,16, 
12,13,14,15, 
+0

Обновление означает, что вы собираетесь делать. Пожалуйста, объясните –

+0

. Мне нужно добавить новый заголовок и данные для поля. Скажем, в настоящее время у меня есть файл с 4 заголовками a, b, c, d и 4 строками данных. Я хочу добавить новый заголовок 'e' с некоторыми данными. – user3387358

+0

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

ответ

0

В принципе - вы не можете сделать это.

Поскольку csv не использует записи фиксированной длины, для большинства изменений потребуется перемещение данных вверх или вниз в файле. Это невозможно сделать без полной перезаписи файла.

1,2,3,4 
5,6,7,8 
... 

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

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

+0

Спасибо за ответ. Я хотел найти какой-то способ и не переписывать файл, так как он содержит 1 миллион записей. Чтение 1 миллиона записей и запись их назад потребует некоторого времени в программе, которую я хочу избежать. – user3387358

+0

@ user3387358 - Если вы выберете формат записи фиксированной длины, вы можете отредактировать его на месте с помощью [RandomAccessFile] (https://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile. HTML). Альтернативно - используйте базу данных. – OldCurmudgeon

+0

Мне нужно добавить новый заголовок с некоторыми данными. Мне не нужно менять существующие заголовки. У меня есть файл с 4 заголовками a, b, c, d и 4 строки данных. Я хочу добавить новый заголовок 'e' с некоторыми данными. – user3387358

0

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

+0

Хорошо, тогда я думаю, что нет другого пути, кроме как читать и писать весь файл снова. – user3387358

+0

Я определенно нет способа. –

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