从Array中编写可序列化对象

时间:2013-05-16 00:28:39

标签: java arrays object serialization

这件事我有点问题。我试图创建一个用户输入数据的数组,数据需要保存在object.obj文件中。

这是我的代码:

  import java.util.*;

  public class insertData implements java.io.Serializable 
{
      Scanner keyboard=new Scanner(System.in);
      private String One;
      private String Two;


      public void new()
      {
          System.out.println("How many lines do you want to insert?");
          int p=keyboard.nextInt();

          for (int i = 0; i < p; i++) 
          {
              One=keyboard.next();
              Two=keyboard.next();
          }
      }

      public String toString()
      {
        new();
        String text=One+"\t"+Two;
        return text;
      }

}

File类将是:

  import java.io.*;

  public class fileA 
  {
      insertData iD = new insertData()
      String a;
      ObjectOutputStream oos;
      ObjectInputStream ois;

      public void writeFile(File file)
     {
         try 
         {
              oos=new ObjectOutputStream(new FileOutputStream(file1));
              a=iD.toString();
              oos.writeObject(a);
              oos.close();

         } 
         catch (FileNotFoundException e) 
         {
             e.printStackTrace();
         } 
         catch (IOException e) 
         {
             e.printStackTrace();
         }
     }

     public void readFile(File file1)
     {
          try  
          {
                ois=new ObjectInputStream(new FileInputStream(file1));
                String str=(String)ois.readObject();
                System.out.println(str);
                ois.close();
          }
          catch (IOException ex) 
          {
            System.err.println(ex);
          }
          catch (ClassNotFoundException ex) 
          {
            System.err.println(ex);
          }

    }
  }

问题是这只保存输入的最后一行数据。 结果应该是:

Text1     Text2
aaaaa     bbbbb
ccccc     ddddd

1 个答案:

答案 0 :(得分:1)

问题是,您只有一个OneTwo,所以当您重复此循环时。

for (int i = 0; i < p; i++) 
{
    One=keyboard.next();
    Two=keyboard.next();
}

你正在覆盖这些价值观。这就是为什么你只获得最后的价值。

您需要做的是将这些元素存储在集合中。

List<String> ones = new ArrayList<String>();
List<String> twos = new ArrayList<String>();
...
for (int i = 0; i < p; i++) 
{
    ones.add(keyboard.next());
    twos.add(keyboard.next());
}

或者你可以附加到缓冲区。

StringBuilder sb = new StringBuilder();
...
for (int i = 0; i < p; i++) 
{
    sb.append(keyboard.next()+"    " +keyboard.next()+"\n");
}

然后恰当地写出文件

相关问题