Java学习笔记——从文件中直接读取已知对象

来源:互联网 发布:linux sort 指定列 编辑:程序博客网 时间:2024/05/21 10:15

这个方法只适用于已知文件内所存对象的具体内容,对于未知的类只能是利用流读取。具体实现代码如下:

import java.io.Serializable;import java.io.*;import java.nio.file.*;import java.io.IOException;//创建对象class Junk implements Serializable {private static java.util.Random generator = new java.util.Random();// 创建随机数// 建立对象参数private int answer;private double[] numbers;private String thought;    private static final long serialVersionUID = 9001L;// 如果没有系统会默认创建,如果以前也有建立的对象接口但容易会有冲突public Junk(String thought) {this.thought = thought;answer = 12;numbers = new double[3 + generator.nextInt(4)];for (int i = 0; i < numbers.length; ++i) {numbers[i] = generator.nextDouble();}}@Overridepublic String toString() {StringBuffer strBuf = new StringBuffer(thought);strBuf.append('\n').append(String.valueOf(answer));for (int i = 0; i < numbers.length; ++i) {strBuf.append("\nnumbers[").append(String.valueOf(i)).append("]=").append(numbers[i]);}return strBuf.toString();//调用的未重载之前的toString函数}}public class DeserializeObjects {/** * @param args */public static void main(String[] args) {// TODO 自动生成方法存根Path file = Paths.get(System.getProperty("user.home")).resolve("Beginning Java Stuff").resolve("JunkObjects.bin");if(!Files.exists(file)){System.out.printf("\nFile %s does not exist.",file);System.exit(1);}int objectCount=0;try{ObjectInputStream objectIn=new ObjectInputStream(new BufferedInputStream(Files.newInputStream(file)));//建立读取对象流Junk object=null;while(true){object=(Junk)objectIn.readObject();//转化为目标对象,如果文件内对象不匹配会抛出异常++objectCount;System.out.println(object);}}catch(EOFException e){//读取完毕System.out.println("EOF reached. "+objectCount+" objects read.");}catch(ClassNotFoundException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();}}}
实现结果如下:



0 0
原创粉丝点击