2017-02-03 15 views
1

オブジェクトを読み込んでファイルに書きたいと思っています。これは私の試みです:ファイルへのオブジェクトの書き込みと読み取り

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import java.util.ArrayList; 

public class SaveOpen implements Serializable 
{ 
    private static String fileName; 
    private ArrayList<Person> list = new ArrayList<Person>(); 

    public SaveOpen() { 
     fileName = "file.txt"; 
    } 
    //Reader 
    public static Object deserialize() throws IOException, 
    ClassNotFoundException { 
     FileInputStream fis = new FileInputStream(fileName); 
     BufferedInputStream bis = new BufferedInputStream(fis); 
     ObjectInputStream ois = new ObjectInputStream(bis); 
     Object obj = ois.readObject(); 
     ois.close(); 
     return obj; 
    } 
    //Writer 
    public static void serialize(Object obj) 
      throws IOException { 
     FileOutputStream fos = new FileOutputStream(fileName); 
     BufferedOutputStream bos = new BufferedOutputStream(fos); 
     ObjectOutputStream oos = new ObjectOutputStream(bos); 
     oos.writeObject(obj); 
     oos.close(); 
    } 
    public void setFileName(String fileName) { 
     this.fileName = fileName; 
    } 
    public ArrayList<Person> getListPersons() { 
     return list; 
    } 

} 

しかし、私はこれが正しい方法であるのか、これをクラスでどのように実装するのかはわかりません。オブジェクトはPersonで、ファイルからそのオブジェクトを保存して読みたいとします。それはファイル.txtに行われるはずですか?物事をはっきりさせることができる人は誰ですか?ありがとう!

+1

ストリームを使用してオブジェクトをシリアライズする場合は、テキストではなくバイナリデータを書き込むので、 '.txt'ファイルに書き込むべきではありません。 – khelwood

+0

'.txt'ファイルに書き込むことはできませんが、内容はテキストであることを示唆しています。 – Kayaman

+0

https://docs.oracle.com/javase/8/docs/technotes/guides/serialization/ <=利用可能な例があります。 – Fildor

答えて

0

ファイルを人間が読めるようにするには、xmlとして保存することをお勧めします。

例:

  • オブジェクトクラス

    import java.io.Serializable; 
    
    public class Person implements Serializable 
    { 
        private String username; 
        private int id; 
    
        public String UserName() { return username; } 
        public void setUserName(String str) { username = str;} 
    
        public int ID() { return id; } 
        public void setID(int ID) { id = ID; }  
    } 
    

-Serializer /デシリアライザ

import Settings.Person; 
import java.beans.XMLDecoder; 
import java.beans.XMLEncoder; 
import java.io.ByteArrayInputStream; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 

public class XmlSerializer 
{ 
    //File path to serialize to and deserialize from 
    private static final String SERIALIZED_FILE_NAME = "yourSavePath.xml"; 
    //Insert person object and save as xml file to chosen filepath 
    public static void Serialize(Person person) 
    { 
     try 
     { 
      FileOutputStream os = new FileOutputStream(SERIALIZED_FILE_NAME); 
      XMLEncoder   encoder = new XMLEncoder(os); 
           encoder.writeObject(person); 
           encoder.close(); 
     } 
     catch(FileNotFoundException ex) 
     { 
      System.out.println(ex.getMessage()); 
     } 
    } 
    //Deserialize xml file into person object 
    public static Person Deserialize() 
    { 
     try 
     { 
      FileInputStream os = new FileInputStream(SERIALIZED_FILE_NAME); 
      XMLDecoder decoder = new XMLDecoder(os); 
      Person p = (Person)decoder.readObject(); 
      decoder.close(); 
      return p; 
     } 
     catch(FileNotFoundException ex) 
     { 
      System.out.println(ex.getMessage()); 
     } 
     return null; 
    } 
    } 
0

あなたは右すでにそれをやっています。あなたはtxtファイル内のオブジェクトを安全にすることができますが、あまり意味がないので、バイナリファイルを使用したいと思います。

複数のオブジェクトを1つのファイルに格納するには、それらをCollectionにパックしてCollectionオブジェクトをシリアライズするだけです。

ファイルからオブジェクトを読み込むときは、instanceofを介してそのクラスをチェックし、それが何であれキャストしてください。

関連する問題