使用相同的writeToFile在java中编写不同的arraylists

时间:2013-06-23 20:18:35

标签: java arraylist

我的程序中有一些arraylists,我想写入一个文件,所以我可以在第二次启动程序时读取它们。 目前它适用于一个人的arraylist。

阅读部分:

ObjectInputStream ois = null;
                    try {
                        ois = new ObjectInputStream(new FileInputStream("test.txt"));

                    } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }


                    team.setPersonList((ArrayList<Person>) ois.readObject());

writeToFile类:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class WriteToFile {


public void write(ArrayList<Person> Data ) throws IOException, ClassNotFoundException{


   // create a new file with an ObjectOutputStream
   FileOutputStream out = new FileOutputStream("test.txt");
   ObjectOutputStream oout = new ObjectOutputStream(out);

   // write something in the file
   oout.writeObject(Data);

   // close the stream
   oout.close();

   // create an ObjectInputStream for the file we created before
   ObjectInputStream ois = null;
try {
    ois = new ObjectInputStream(new FileInputStream("test.txt"));
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

   // read and print what we wrote before
   System.out.println("" + ois.readObject());


  ois.close();
}

}

主要:

    import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;


public class Main {

    public static void main(String[] args) throws ClassNotFoundException, IOException{
        BufferedReader scan = new BufferedReader(new InputStreamReader(System.in));
        Team team = new Team(scan);

        new InlogSystem(team, scan);
        ArrayList<Person> playersData = team.getPersonList();

        WriteToFile x = new WriteToFile();
        x.write(playersData);
        scan.close();

    }

}

所以这是工作部分, 现在我想要一个Strings的arraylist使用相同的writeToFile类写入另一个txt文件(不像personlist那样测试)。 显然,writemethod只适用于person类型的arraylist,它总是将数组保存到“test.txt”。

如何在不制作新方法且有大量代码的情况下编写此arraylist? 非常感谢!

3 个答案:

答案 0 :(得分:1)

您可以将参数类型ArrayList<String>更改为ArrayList<?>甚至List<?>,或者我建议更改为Object。然后,您的方法能够写入任意对象。

在这里使用泛型是没用的:它提供了编译时类型检查,它不会在你的方法中使用。

顺便说一下,你的异常处理非常糟糕。我建议你抓住并重新抛出ClassNotFoundException作为IOException; FileNotFoundException只是IOException的子类,无需单独捕获 - 当您的方法声明为IOException时,为什么要捕获throws IOException

答案 1 :(得分:0)

修改你的方法来接受List,其中T是参数化对象。请参阅generics文档

答案 2 :(得分:0)

使用generic method并将文件名作为参数传递,即

public <T implements Serializable> void write(ArrayList<T> Data, String filename) throws IOException {

   // create a new file with an ObjectOutputStream
   FileOutputStream out = new FileOutputStream(filename);
   ObjectOutputStream oout = new ObjectOutputStream(out);

   // write something in the file
   oout.writeObject(Data);

   // close the stream
   oout.close();

   // create an ObjectInputStream for the file we created before
   ObjectInputStream ois = null;
   ois = new ObjectInputStream(new FileInputStream("test.txt"));

   // read and print what we wrote before
   System.out.println("" + ois.readObject());

   ois.close();
}