0

与えられたのは、次の例の構造/コンテンツを持つ既存の CSV ファイルです。

id,password,role
user1,1234,student
user2,1234,professor

Java で単純な CRUD 操作を使用して基本的な DAO を作成し、そのデータにアクセスして変更したいと考えています。単一のレコード/行を更新/編集することは可能ですか? それとも、ファイルを完全に解析して書き直す必要がありますか?

現在の実装:

package com.testproject.persistence;

import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

import com.testproject.model.User;

public class UserDAO {
    private final static String CSV_FILE = "/Users/someuser/Desktop/test.csv";

    /**
     * 
     * @param user
     */
    public void add(User user) {
        try {
            FileWriter writer = new FileWriter(CSV_FILE, true);

            writer.append(user.getId());
            writer.append(';');
            writer.append(user.getPassword());
            writer.append('\n');

            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 
     * @param user
     */
    public void update(User user) {
        //
    }

    /**
     * 
     * @param userId
     */
    public void delete(String userId) {
        //
    }

    /**
     * 
     * @return
     */
    public List<User> findAll() {
        return null;
    }

    /**
     * 
     * @param userId
     * @return
     */
    public User findByPrimaryKey(String userId) {
        return null;
    }
}

よろしくお願いいたします

フィリップ

4

1 に答える 1

0

アプローチ: 元の csv を読み取る -> メモリ内のコンテンツを変更し、新しいファイルに書き込む -> 古いファイルを削除する -> 新しいファイルの名前を変更する)

これを達成するための 2 つのアプローチ:

最初: csv が大きすぎない場合 1. csv の各行を表すオブジェクトを作成します 2. csv を読み取った後、csv をオブジェクトのコレクションとして表します

作成: コレクションにオブジェクトを追加し、ファイルを書き直します

READ : コレクションは csv のレプリカであるため、コレクションからの単純な読み取り

更新: コレクション内のオブジェクトを更新し、csv を書き直します

DELETE : コレクションからオブジェクトを削除し、csv を書き直します

**このアプローチの利点は、READS がファイルの読み取りから解放されることです。

2 つ目: csv が大きすぎてメモリの制約がある場合は、コレクションの作成を回避しますが、更新を行うときにファイルを書き直す必要があります。

** このアプローチの利点は、メモリを節約できることですが、READS も遅くなります。

于 2013-05-02T13:12:34.620 に答える