2016-10-20 3 views
0

Я пытаюсь добавить значение в определенную строку в файле csv, но append'd по умолчанию должен добавить значение в конец файла csv , Не совсем точно, как сказать, чтобы добавить его в конце определенной строки. Мой код выглядит следующим образом:Добавить/добавить данные в определенную строку/ячейку существующего файла CSV

try { 
     writer = new FileWriter(csvFile ,true); 
     br = new BufferedReader(new FileReader(csvFile)); 
     while ((line = br.readLine()) != null) { 

      // use comma as separator 
      String[] id = line.split(cvsSplitBy); 

      if(id[0].equals("1")){ 
       writer.append(","); 
       writer.append("Success"); 
       System.out.println("Done"); 
      } 
     } 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (br != null) { 
      try { 
       br.close(); 
       writer.flush(); 
       writer.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

Цель состоит в том, чтобы сделать программу добавить «успех», где строка CSV идентификатор равен 1. Текущий результат:

Id,Name,Sex,Age 
1,Nick,Male,23 
2,Dick,Male,25,Success 

Что я хотел бы is:

Id,Name,Sex,Age 
1,Nick,Male,23,Success 
2,Dick,Male,25 

Любая помощь будет принята с благодарностью. Благодарю.

+0

Возможно, вы можете снять писателя, как только вы добавите успех? –

+0

Я пробовал это и, к сожалению, он не работает. Все еще добавляется в конце документа. – Chognificent

+1

Думаю, нам нужно немного больше, чтобы продолжить. Можете ли вы разместить больше своего кода? – DivDiff

ответ

1

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

one 
two 

Этот файл содержит следующую последовательность символов:

«о», «п», «е», «\ п», «т», «ж »,„о“,„\ п“

Теперь, если добавить больше символов в конце строки 1, вы перезаписать строку 2.

Таким образом, при вставке символов в конце строки , вам нужно сдвинуть оставшуюся часть файла, чтобы освободить место. Это означает, что вам нужно скопировать содержимое оставшейся части файла, написать строку «Успех», а затем скопировать сохраненные символы обратно в файл.

Но вы создаете FileWriter с флагом добавления, установленным в true. Это означает, что каждая запись добавляется в конец файла. То, что вам нужно сделать, вместо добавления, - это отметить позицию, в которой вам нужно писать, и начать писать в этой позиции. Возможно, самый простой класс для этого - RandomAccessFile.

0

Поскольку строки CSV завершаются CRLF (или просто LF), вы можете просто прочитать все содержимое файла в строку и использовать регулярное выражение для замены CRLF с помощью successCRLF.

Регулярное выражение должно быть что-то вроде этого:.

1 * (\ г \ п)

Давать вам \ г \ п как нумерованный группы захвата.

Надеюсь, что это поможет

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