-1

そのため、arraylist インデックス (最初のインデックスは 0) をテキスト ファイルに出力する方法がわかりません。基本的に、5つの変数を格納する Job クラスがあります

public class Job {

public int teamNo;
    public String regNo;
    public String gridRef;
    public String gridCopy;

    public String toString() {

        return "Job [teamNo=" + teamNo + ", regNo=" + regNo + ", gridRef="
                + gridRef + "";

    }

次に、ジョブ型の配列リストがあります。

private static ArrayList<Job> teamNoOne = new ArrayList<Job>();

したがって、データはすべて正常に追加され、印刷されますが、テキストファイルに保存できません。これは私のコードです。ランダムなハッシュコードを取得するだけですが、人間が読める形式にする必要があります。

try {
                    File file = new File("JOBS-DONE-LOG.txt");
                    FileOutputStream fs = new FileOutputStream(file);
                    ObjectOutputStream os = new ObjectOutputStream(fs);
                    System.out.println(teamNoOne.get(0));

                    os.writeObject(teamNoOne.get(0));
                    os.close();


                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }

方法がわかりません。

4

3 に答える 3

1

writeObject はファイル内のオブジェクトをシリアル化し、テキスト形式で書き込みません ( http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html#writeObject(java.lang.オブジェクト) )

別の方法で行う必要があります。たとえば、BufferedWriter クラスと write メソッドを使用して、toString() メソッドの出力を書き込むことができます。

完全な例を次に示します。

import java.io.File;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.ArrayList;

public class Job {
  public String regNo;
  public String gridRef;
  public String gridCopy;

  public String toString() {

    return "Job [teamNo=" + teamNo + ", regNo=" + regNo + ", gridRef="
    + gridRef + "";

  }

  public static void main(String[] args) throws Exception {
    ArrayList<Job> teamNoOne = new ArrayList<Job>();
    // fill your array
    Job job = new Job();
    job.regNo = "123";
    // continue to fill the jobs...
    teamNoOne.add(job);
    BufferedWriter writer = new BufferedWriter(new FileWriter("JOBS-DONE-LOG.txt"));
    System.out.println(teamNoOne.get(0));
    writer.write(teamNoOne.get(0).toString());
    os.close();
  }
}
于 2013-10-28T11:34:07.043 に答える
0

Job タイプの arraylist を保存しようとしているため、シリアル化する必要があります (これを参照してください)。

  public class Job implements java.io.Serializable
  {
     public int teamNo=0;
     public String regNo="default";
     public String gridRef="default";
     public String gridCopy="default";

    public String toString() {

    return "Job [teamNo=" + teamNo + ", regNo=" + regNo + ", gridRef="
            + gridRef + "";

    }
  }

ファイルの保存について

      try
      {
         FileOutputStream fileOut = new FileOutputStream(path);
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(teamNoOne);
         out.close();
         fileOut.close();
      }
      catch(IOException i)
      {
          i.printStackTrace();
      }

したがって、配列リストを次のようにロードできます

      Object o = null;
      try
      {
         FileInputStream fileIn = new FileInputStream(path);
         ObjectInputStream in = new ObjectInputStream(fileIn);
         o = in.readObject();
         in.close();
         fileIn.close();
      }
      catch(IOException i)
      {
          i.printStackTrace();
      }
      catch(ClassNotFoundException c)
      {
          c.printStackTrace();
      } 
      Arraylist<Job> loaded_Job = (ArrayList<Job>) o;

次に、配列リストを印刷します

         for(int i = 0; i < loaded_Job.size(); i++) {   
            loaded_Job.get(i).toString();
          }  
于 2013-10-28T11:38:55.207 に答える
-2

これは、 をパラメータ化していないために発生しますArrayList。リストを宣言するときにジェネリックを使用します。

ArrayList<Job> teamNoOne = new ArrayList<Job>();

toString()現在、メソッドをオーバーライドしていますが、teamNoOne.get(0)を使用しているためObjectですtoString()

于 2013-10-28T11:34:35.343 に答える