Java对文件中的对象进行存取

1.保存对象到文件中

Java语言只能将实现了Serializable接口的类的对象保存到文件中,利用如下方法即可:

 public static void writeObjectToFile(Object obj)
    {
        File file =new File("test.dat");
        FileOutputStream out;
        try {
            out = new FileOutputStream(file);
            ObjectOutputStream objOut=new ObjectOutputStream(out);
            objOut.writeObject(obj);
            objOut.flush();
            objOut.close();
            System.out.println("write object success!");
        } catch (IOException e) {
            System.out.println("write object failed");
            e.printStackTrace();
        }
    }

参数obj一定要实现Serializable接口,否则会抛出java.io.NotSerializableException异常。另外,如果写入的对象是一个容器,例如List、Map,也要保证容器中的每个元素也都是实现 了Serializable接口。例如,如果按照如下方法声明一个Hashmap,并调用writeObjectToFile方法就会抛出异常。但是如果是Hashmap<String,String>就不会出问题,因为String类已经实现了Serializable接口。另外如果是自己创建的类,如果继承的基类没有实现Serializable,那么该类需要实现Serializable,否则也无法通过这种方法写入到文件中。



 Object obj=new Object();
        //failed,the object in map does not implement Serializable interface
        HashMap<String, Object> objMap=new HashMap<String,Object>();
        objMap.put("test", obj);
        writeObjectToFile(objMap);

2.从文件中读取对象

可以利用如下方法从文件中读取对象

public static Object readObjectFromFile()
    {
        Object temp=null;
        File file =new File("test.dat");
        FileInputStream in;
        try {
            in = new FileInputStream(file);
            ObjectInputStream objIn=new ObjectInputStream(in);
            temp=objIn.readObject();
            objIn.close();
            System.out.println("read object success!");
        } catch (IOException e) {
            System.out.println("read object failed");
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return temp;
    }

读取到对象后,再根据对象的实际类型进行转换即可。

时间: 2024-11-15 05:15:58

Java对文件中的对象进行存取的相关文章

Java入门-类HelloWorld是公共的,应在名为HelloWorld.java的文件中声明

开始学习java了,搭好环境,notepad++中新建一个java文件,新建一个HelloWorld类, public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } 保存文件时取名firstjava.java,然后进入命令行开始编译,然而编译时却出现一个错误,“类HelloWorld是公共的,应在名为HelloWorld.java的文

错误: 类Something是公共的, 应在名为 Something.java 的文件中声明

Java编译报错: 错误: 类Something是公共的, 应在名为 Something.java 的文件中声明 如下图所示: 第一种解释:"类A是公共的,应在名为 A.java 的文件中声明"这句话需要分两步来理解: 1.在Java中,如果类A被声明为公共的(public),那么必须将类A保存在名为 A.java的文件中: 2.反之,在一个Xxx.java的文件中最多包含一个顶级的公共类,并且该公共类的名字要与文件名相同.比如文件A.java中,允许定义一个或多个类,但最多允许一个顶

利用Java实现文件中的关键字查询

1 package com.sinsoft.fileSearch; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileFilter; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.io.FileReader; 9 import java.io.IOExcept

Java - 从文件中读入字符串和整数

想平时写 C++ 时,从文件中按指定格式读入数据多方便.. 给自己写个 Java 的.. package lib.com.chalex.www; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; /** * @author

java 一个文件中写多个class

一个java文件中可以包含多个类,但这些类中一个特殊类,这个类的属性为public,且这个类的名字与文件名相同,java文件中仅有一个类为public. interface Moveable { void run(); } //具体产品角色 class Plane implements Moveable { @Override public void run() { System.out.println("plane...."); } } class Broom implements

Java propertis文件中组装配置

目的: 实现在配置文件中,进行组装 1.Properties文件配置如下: dns=http://211.103.227.133:8080 qrcode=${dns}/wx/views/invite/register.html 类似域名和公共的东西,希望在properties文件中直接进行组装,而不是在代码中进行组装 2.使用spring注解 @Value注解 注意:图中使用@Service或 @Component,并且@Value必须写在set属性上,否则取不到值 输出结果为: http://

java使用ObjectInputStream从文件中读取对象

import java.io.EOFException;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.ObjectInputStream; public class Main { /***ObjectInputStream 使用示例*/public void readPersons(String filename) { Ob

Java—从文件中读取数据

1.FileInputStream() // 构建字节输入流对象,参数为文件名 FileInputStream fin = new FileInputStream("message"); System.out.println("输入流可读入字节数:" + fin.available()); // 建立byte型数组b,从输入流读取的数据暂时存放在b中 byte b[] = new byte[fin.available()]; // 从输入流读取数据 fin.read

Java线程安全性中的对象发布和逸出

发布(Publish)和逸出(Escape)这两个概念倒是第一次听说,不过它在实际当中却十分常见,这和Java并发编程的线程安全性就很大的关系. 什么是发布?简单来说就是提供一个对象的引用给作用域之外的代码.比如return一个对象,或者作为参数传递到其他类的方法中. 什么是逸出?如果一个类还没有构造结束就已经提供给了外部代码一个对象引用即发布了该对象,此时叫做对象逸出,对象的逸出会破坏线程的安全性. 概念我们知道了,可我们要关注什么地方呢?我们要关注的时候就是逸出问题,在不该发布该对象的地方就