Domanda

Ho alcune domande per quanto riguarda la lettura e la scrittura di file CSV (o se c'è un'alternativa più semplice).

Scenario: Ho bisogno di avere un semplice database di persone e alcune informazioni di base su di loro. Ho bisogno di essere in grado di aggiungere nuove voci e di ricerca attraverso il file per le voci. Ho anche bisogno di essere in grado di trovare una voce e modificarlo (cioè cambiare il loro nome o il riempimento in un campo vuoto).

Ora io non sono sicuro se un lettore CSV / scrittore è il percorso migliore o no? Io non so da dove cominciare con SQL in Java, ma se qualcuno sa di una buona risorsa per l'apprendimento che, che sarebbe grande.

Attualmente sto usando SuperCSV, ho messo insieme un progetto di test basato intorno qualche esempio di codice:

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();
   }
}

e una classe di scrittore:

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();
}
  }
}

Problemi: Sto lottando per ottenere la scrittrice per aggiungere una nuova riga al file CSV. Puramente per scopi di leggibilità umani, non come un grande affare. Non sono sicuro di come avrei aggiungere dati a un record esistente per modificarlo. (Rimuovere e aggiungere di nuovo? Non sei sicuro di come fare questo).

Grazie.

È stato utile?

Soluzione

La soluzione più semplice è quello di leggere il file all'avvio dell'applicazione in una struttura in memoria (lista di UserBean, per esempio), per aggiungere, rimuovere, modificare i fagioli in questa struttura in memoria, e di scrivere l'intero elenco dei UserBean al file quando si chiude app, o quando la sceglie all'utente di salvare.

Per quanto riguarda a capo durante la scrittura, il javadoc sembra indicare che lo scrittore si prenderà cura di questo. Basta chiamare write per ciascuna della vostra fagioli utente, e lo scrittore verrà automaticamente inserto a capo tra ogni riga.

Altri suggerimenti

Avete considerato un database integrato come H2 , HSQL o SQLite ? Tutti possono persistere per il filesystem e scoprirete un archivio dati più flessibile con meno codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top