2

私のJavaプロジェクトにはいくつかのクラス/ Javaファイルがありますが、使用されているもののすべてのリストが保存されているMenuクラスにあります。データに関しては、6 つのリスト (2 つの ArrayLists と 4 つの HashMaps) を保存します。1 つが Menu クラスで定義され、他は異なるクラスにあります。そのため、プログラムを閉じて以前の状態を復元するときに、 savestateloadstateを作成する必要があります。すべてのリストはシリアライズ可能で実装されています

すべてのメニューの状態を保存して再読み込みすることは可能ですか、それともすべてのリストを個別に保存する必要がありますか? すべてを1つのファイルに保存するのは素晴らしいことです。

これが私が持っている機能で、動作し(警告/エラーなし)、コンパイルされますが、ファイル「datafiles」は作成されません。

何か案は?

    private void MenuSave(){
    String wd = System.getProperty("user.dir");

    JFileChooser fc = new JFileChooser(wd);
    int rc = fc.showDialog(null, "Select Data File Location to Save");

    if (rc == JFileChooser.APPROVE_OPTION)
    {
    File file = fc.getSelectedFile();
    String filename = file.getAbsolutePath();

    savestate(lf, lc, lv, lcl,filename);}
    }


public void savestate(Cars la, Bikes l2, Motos l3, Planes l4, People n1, Food n2, String filename){

    int i;
    File out = new File(filename);

    ObjectOutputStream output = null;

    try{
        output = new ObjectOutputStream(new FileOutputStream(filename));
        for(Car c : la.getCars().values()){
            output.writeObject(c);
        }
        for(Bike b : l2.getBikes().values()){
            output.writeObject(b);
        }
        for(Moto m : l3.getMotos().values()){
            output.writeObject(m);
        }
        for(i=0;i<n1.size();i++)
        {output.writeObject(n1.get(i)));
        }
        for(i=0;i<n2.size();i++)
        {output.writeObject(n2.get(i)));
        }


    }catch (FileNotFoundException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    } finally {
        try {
            if (output != null) {
                output.flush();
                output.close();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
4

2 に答える 2

3

doesn't creates the file "datafiles".

I'll bet that it does, just not where you are expecting to find it. Don't "drop your files wherever they fall", put them some place that is read/writable, logical and reproducible.

String filename = "datafiles";
File out = new File(System.getProperty("user.home"), filename);
// ...
    output = new ObjectOutputStream(new FileOutputStream(out));

Then look in user home for the datafiles (why does it have no file type/extension?) file.

  1. The File constructor that accepts 2 String (parent & name) parameters uses the correct File separator for the OS.
  2. user.home is a system property that points to a stable, reproducible path that has read/write access.
于 2012-05-27T05:50:48.980 に答える
0

だから私が思ったように、それなしでリストを個別に保存する必要があるだけです。1-ファイルを保存する場所を選択し、そこにクラスを保存します。2-読み取りには、入力を解析し、現在のクラスを置き換えて保存します。...

    String wd = System.getProperty("user.dir");
    this.setAlwaysOnTop(false);
    JFileChooser fc = new JFileChooser(wd);

    fc.setDialogType((int)JFileChooser.SAVE_DIALOG);


    int rc = fc.showDialog(null, "Select Data File");
    this.setAlwaysOnTop(true);

    if (rc == JFileChooser.APPROVE_OPTION)
    {
    File file = fc.getSelectedFile();

    ObjectOutputStream output = null;

    try{
    output = new ObjectOutputStream(new FileOutputStream(file));
    output.writeObject(list1);
    output.writeObject(list2);
    output.writeObject(list3);
    ....


    output.close();

    }catch (IOException x){
     ....
    }catch(NullPointerException n){
     ....    
    }}

読むことはまったく同じです:

    String wd = System.getProperty("user.dir");
    this.setAlwaysOnTop(false);
    JFileChooser fc = new JFileChooser(wd);
    fc.setDialogType((int)JFileChooser.OPEN_DIALOG);
    int rc = fc.showDialog(null, "Select Data File to Load");
    this.setAlwaysOnTop(true);

    if (rc == JFileChooser.APPROVE_OPTION)
    {
    File file = fc.getSelectedFile();
    String filename = file.getAbsolutePath();


    ObjectInputStream input = null;
    try{
    input = new ObjectInputStream(new FileInputStream(file));
    this.list1=(ListType1)input.readObject();
    this.list2=(ListType2input.readObject();
    ....
    }catch (IOException x){
      ...  

    }catch(ClassNotFoundException x){
      ...
    }
    }
于 2012-05-28T22:28:48.203 に答える