Java CSV Reader / Writer Вопросы - PullRequest
       11

Java CSV Reader / Writer Вопросы

1 голос
/ 30 ноября 2011

У меня есть несколько вопросов, касающихся чтения и записи в файлы CSV (или, если есть более простая альтернатива).

Сценарий: Мне нужна простая база данных людей и несколько основныхинформация о них.Мне нужно иметь возможность добавлять новые записи и искать записи в файле.Мне также нужно иметь возможность найти запись и изменить ее (то есть изменить ее имя или заполнить в настоящее время пустое поле).

Теперь я не уверен, является ли читатель / писатель CSV лучшим маршрутом илине?Я не знаю, с чего начать с SQL в Java, но если кто-нибудь знает хороший ресурс для изучения этого, это было бы здорово.

В настоящее время я использую SuperCSV, я собрал тестовый проект, основанный на некоторыхпример кода:

class ReadingObjects {

//  private static UserBean userDB[] = new UserBean[2];
private static ArrayList<UserBean> arrUserDB = new ArrayList<UserBean>();

static final CellProcessor[] userProcessors = new CellProcessor[] {
    new StrMinMax(5, 20),
    new StrMinMax(8, 35),
    new ParseDate("dd/MM/yyyy"),
    new Optional(new ParseInt()),
    null
};

public static void main(String[] args) throws Exception {
    ICsvBeanReader inFile = new CsvBeanReader(new FileReader("foo.csv"), CsvPreference.EXCEL_PREFERENCE);
    try {
      final String[] header = inFile.getCSVHeader(true);
      UserBean user;
      int i = 0;
      while( (user = inFile.read(UserBean.class, header, userProcessors)) != null) {
        UserBean addMe = new UserBean(user.getUsername(), user.getPassword(), user.getTown(), user.getDate(), user.getZip());

        arrUserDB.add(addMe);
        i++;

      }
    } finally {
      inFile.close();
    }

    for(UserBean currentUser:arrUserDB){
        if (currentUser.getUsername().equals("Klaus")) {
            System.out.println("Found Klaus! :D");
        }
    }

    WritingMaps.add();
   }
}

И класс писателя:

class WritingMaps {

  public static void add() throws Exception { 
ICsvMapWriter writer = new CsvMapWriter(new FileWriter("foo.csv", true), CsvPreference.EXCEL_PREFERENCE);
try {
  final String[] header = new String[] { "username", "password", "date", "zip", "town"};
  String test = System.getProperty("line.seperator");


  // set up some data to write
  final HashMap<String, ? super Object> data1 = new HashMap<String, Object>();
  data1.put(header[0], "Karlasa");
  data1.put(header[1], "fdsfsdfsdfs");
  data1.put(header[2], "17/01/2010");
  data1.put(header[3], 1111);
  data1.put(header[4], "New York");


  System.out.println(data1);

  // the actual writing
//      writer.writeHeader(header);
  writer.write(data1, header);
//      writer.write(data2, header);
} finally {
  writer.close();
}
  }
}

Проблемы: Я пытаюсь заставить писателя добавитьновая строка в файл CSV.Чисто для удобства чтения человеком, не такая уж большая проблема.Я не уверен, как добавить данные в существующую запись, чтобы изменить ее.(удалите и добавьте его снова? Не знаете, как это сделать).

Спасибо.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Рассматривали ли вы встроенную базу данных, такую ​​как H2 , HSQL или SQLite ?Все они могут сохраняться в файловой системе, и вы обнаружите более гибкое хранилище данных с меньшим количеством кода.

1 голос
/ 30 ноября 2011

Самое простое решение - прочитать файл при запуске приложения в структуру в памяти (например, список UserBean), добавить, удалить, изменить компоненты в этой структуре в памяти и записать целое список UserBean файла, когда приложение закрывается или когда пользователь выбирает Сохранить.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...