0

私はオブジェクト配列リストを持っていますが、誰かがファイルからオブジェクトを書き込んだり取得したりするための最も効率的な方法を教えてくれますか?

ありがとう。

私の試み

 public static void LOLadd(String ab, String cd, int ef) throws IOException {
     MyShelf newS = new MyShelf();
     newS.Fbooks = ab;
     newS.Bbooks = cd;
     newS.Cbooks = ef;
     InfoList.add(newS);

         FileWriter fw;
                 fw = new FileWriter("UserInfo.out.txt");
             PrintWriter outt = new PrintWriter(eh);
                 for (int i = 0; i <InfoList.size(); i++)
                 {
                     String ax = InfoList.get(i).Fbooks;
                     String ay = InfoList.get(i).Bbooks;
                     int az = InfoList.get(i).Cbooks;
                     output.print(ax + " " + ay + " " + az);  //Output all the words to file // on the same line
                     output.println(""); //Make space
                 }
                 fw.close();
                 output.close();
}

ファイルを取得しようとしました。また、ファイルを取得した後、オブジェクトの各列を読み取るにはどうすればよいですか?たとえば、私が:::::フィクション、ドラマ、演劇を持っている場合---ドラマ列に値を読み取り、取得、置換、削除、および追加するにはどうすればよいですか?

public Object findUsername(String a) throws FileNotFoundException, IOException,     ClassNotFoundException  
{    
 ObjectInputStream sc = new ObjectInputStream(new FileInputStream("myShelf.out.txt"));

    //ArrayList<Object> List = new ArrayList<Object>();
    InfoList = null;
    Object  obj = (Object) sc.readObject();

    InfoList.add((UserInfo) obj);
    sc.close();

     for (int i=0; i <InfoList.size(); i++) {
          if (InfoList.get(i).user.equals(a)){
               return "something" + InfoList.get(i);
      }
   }
     return "doesn't exist"; 
 }

public static String lbooksMatching(String b)    {

    //Retrieve data from file
    //...

    for (int i=0; i<myShelf.size(); i++)       {
        if (myShelf.get(i).user.equals (b))   
        {
            return b;
        }
        else 
        {
            return "dfbgregd"; 
        }
   }
    return "dfgdfge"; 
}

public static String matching(String qp)    {
    for (int i=0; i<myShelf.size(); i++)       {
        if (myShelf.get(i).pass.equals (qp))   
        {
            return c;
        }
        else 
        {
            return "Begegne"; 
        }
   }
    return "Bdfge"; 
}

ありがとう!!!

4

2 に答える 2

3

オブジェクトをシリアル化し、そのシリアル化された形式をある種のストレージ (この場合はファイル) に保持したいようです。

ここで 2 つの重要な注意事項:

シリアル化

内部 Java シリアライゼーション

  • Java は、java.io.Serializable インターフェイスを実装してオブジェクトをマークする必要がある自動シリアライゼーションを提供します。インターフェイスを実装すると、クラスが「シリアル化しても問題ありません」とマークされ、Java がシリアル化を内部で処理します。
  • オブジェクトをバイトとの間でシリアル化/逆シリアル化する方法のコード サンプルについては、この投稿を参照してください。

これは、(Java によって処理される) 形式を制御できないため、オブジェクトを永続化するための理想的な方法ではありません。人間が判読できるものではなく、オブジェクトが変更された場合にバージョン管理の問題が発生する可能性があります。

JSON または XML へのマーシャリング

  • オブジェクトをディスクにシリアル化するより良い方法は、XML や JSON などの別のデータ形式を使用することです。
  • オブジェクトを JSON 構造との間で変換する方法のサンプルは、こちらにあります

重要:非常に正当な理由がない限り(ここには表示されません)、あなたが行っているようなコードでのシリアル化は行いません。すぐに乱雑になり、オブジェクトが変更されると変更される可能性があります。シリアル化のより自動化された方法を選択します。また、JSON / XML などの形式を使用する場合、その形式の読み取り/書き込みに使用できる API がたくさんあることを知っているので、シリアル化 / 逆シリアル化のロジックをすべて実装する必要はもうありません。

持続性

シリアル化されたオブジェクトをファイルに書き込むことは、さまざまな理由で常に良い考えとは限りません (バージョン管理/同時実行の問題/ .....)。

より良いアプローチは、データベースを使用することです。階層型データベースの場合は、Hibernate または JPA を調べて、ごくわずかなコードでオブジェクトを永続化してください。MongoDB のようなドキュメント データベースの場合は、JSON のシリアル化された表現を永続化できます。

Java でデータベースにオブジェクトを永続化するために利用できるリソースはたくさんあります。永続性とオブジェクト/リレーショナル マッピングの標準 API であるJPAを確認することをお勧めします。

于 2013-03-22T15:40:43.427 に答える
0

別の基本的な例を次に示します。これは、Arraylist、コンストラクター、およびファイルへの出力の書き込みに関する洞察を提供します。これを実行した後、IDE を使用している場合はプロジェクト フォルダーに移動し、そこに *.txt ファイルをファイルします。

import java.io.*;
import java.util.List;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ListOfNumbers {

    private List<Integer> list;
    private static final int SIZE = 10;//whatever size you wish

    public ListOfNumbers () {
        list = new ArrayList<Integer>(SIZE);
        for (int i = 0; i < SIZE; i++) {
            list.add(new Integer(i));
        }
    }

    public void writeList() {
        PrintWriter out = null;
        try {
            out = new PrintWriter(new FileWriter("ManOutFile.txt"));
            for (int i = 0; i < SIZE; i++) {
                out.println("Value at: " + i + " = " + list.get(i));
            }
            out.close();
        } catch (IOException ex) {
            Logger.getLogger(ListOfNumbers.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            out.close();
        }
    }
public static void main(String[] args)
{
    ListOfNumbers lnum=new ListOfNumbers();
    lnum.writeList();
}
}
于 2013-05-14T07:24:33.727 に答える