读/写对象Array to file

时间:2017-05-28 04:57:47

标签: java

我正在尝试将对象数组保存到文件中,然后能够从该文件中读取对象并将它们添加到数组中。我没有收到任何错误,但它似乎没有做任何事情。我不确定我的问题在于我的读写方法。

Movie allmovies = new Movie[4]
public void writeFile()
    {
        try
        {
           FileOutputStream fos = new FileOutputStream("movies.txt");
           ObjectOutputStream oos = new ObjectOutputStream(fos);
           oos.writeObject(allmovies);
           oos.close();
           System.out.println("File Saved");
        }
        catch(Exception e) {
            System.out.println("Error in output:" + e.toString());
        }
    }
    public void readFile()
    {
        try
        {
            FileInputStream fis = new FileInputStream("movies.txt");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Movie[] allmovies = (Movie[]) ois.readObject();
            ois.close();   
            System.out.println("File Imported");
        }
        catch(Exception e)
        {
            System.out.println("Error in output:" + e.toString());
        }
    }

编辑:我们需要阅读的示例文件的格式是

电影标题:

导演:

尺寸:

持续时间:

我能够让它写1个对象并读取1个对象,但是当我查看保存的文件时,它的格式不同。反正是否有与示例相同的格式?

2 个答案:

答案 0 :(得分:1)

  

我们已经提供了我们需要的示例文件的格式   读是

     

电影标题:

     

导演:

     

尺寸:

     

持续时间:

     

我能够让它写1个对象并读取1个对象,但它已经存在了   查看已保存文件时的格式不同。

Java序列化允许将对象编码为字节,而不是编码为序列化对象的文本人类可理解表示。
如果您真的想以您显示的格式编写文件,则应使用:

  • 以文字表示形式编写电影:BufferedWriter包裹FileWriter
    例如:new BufferedWriter(new FileWriter("myFile"))
    它有append(CharSequence)方法可以附加String个对象,newLine()方法可以追加换行符。

  • 以文字形式阅读电影:BufferedReader包裹FileReader
    例如:new BufferedReader(new FileReader("myFile"))
    它有readLine()方法来读取流的一行。

如果要将影片序列化为字节并仅将其渲染为文本表示,请继续使用Java序列化并添加处理以所需的文本格式显示影片阵列。
反序列化数组后,您只需要迭代它就可以生成电影所需的文本表示形式 例如,要在标准输出中呈现读取对象,您可以编写:

Movie[] movies = (Movie[]) ois.readObject(); 
for (Movie movie : movies){
      System.out.println("Movie Title:" + movie.getTitle());
      System.out.println("Director:" + movie.getDirector());
      System.out.println("fileSize:" + String.valueOf(movie.getTitle()));
      System.out.println("duration:" + movie.getTitle());
}

答案 1 :(得分:0)

这是使用没有任何集合的数组完成的。我稍微修改了你的代码,希望这会有所帮助。你可以直接复制这段代码并运行。它将成功读取对象并显示所有四个对象。在我将要上传的未来版本中,我将添加更多评论以提高相同的清晰度。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;


public class Test {
Movie[] allMovies = new Movie[4];
public static void main(String[] args) {
    Test t = new Test();
    t.allMovies[0] = new Movie("A","B",1L,2L);
    t.allMovies[1] = new Movie("C","D",1L,2L);
    t.allMovies[2] = new Movie("E","F",1L,2L);
    t.allMovies[3] = new Movie("G","H",1L,2L);
    t.writeFile();
    t.readFile();
}
public void writeFile()
{
    try
    {
       FileOutputStream fos = new FileOutputStream("movies.txt");
       ObjectOutputStream oos = new ObjectOutputStream(fos);
       oos.writeObject(allMovies);
       oos.close();
       System.out.println("File Saved");
    }
    catch(Exception e) {
        System.out.println("Error in output:" + e.toString());
    }
}
public void readFile()
{
    try
    {
        FileInputStream fis = new FileInputStream("movies.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Movie[] allmovies = (Movie[]) ois.readObject();
        for(int i = 0; i < 4; i++){
            System.out.println("Movie = " + allmovies[i].movieTitle + " Director = " + allmovies[i].director + " FileSize = " + allmovies[i].fileSize + " Duration = " + allmovies[i].duration);
        }
        ois.close();   
        System.out.println("File Imported");
    }
    catch(Exception e)
    {
        System.out.println("Error in output:" + e.toString());
    }
}
}
class Movie implements Serializable{
private static final long serialVersionUID = 1647631086810497694L;
String movieTitle;
String director;
Long fileSize;
Long duration;
Movie(String m, String d, Long fs, Long dur){
    this.movieTitle = m;
    this.director = d;
    this.fileSize = fs;
    this.duration = dur;
}
}