我正在尝试将对象数组保存到文件中,然后能够从该文件中读取对象并将它们添加到数组中。我没有收到任何错误,但它似乎没有做任何事情。我不确定我的问题在于我的读写方法。
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个对象,但是当我查看保存的文件时,它的格式不同。反正是否有与示例相同的格式?
答案 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;
}
}