`
piperzero
  • 浏览: 3473712 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Java 如何对文件进行多个Object对象流的读写操作

 
阅读更多

思路:把已经序列化的对象存入容器(如LinkedList<?>)中,然后用ObjectInputStream和ObjectOutputStream对这个实例化的LinkedList<?>对象进行读写。


测试主程序:


/**   
* @Title: FileRW.java
* @Package com.file
* @Description: 文件、文件夹的创建、写入练习。读写是使用对象流实现。
* @author 慢跑学Android
* @date 2011-11-19 下午03:53:01
* @version V1.0   
*/
package com.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.LinkedList;


public class FileRW {
	private String dirPath;
	private String filename;
	
	public static void main(String[] args) {
		String path = "C:\\晓声";
		String fileName = "test.txt";
		FileRW fileRW = new FileRW(path, fileName);
		LinkedList<TestMessage> msgOut = new LinkedList<TestMessage>();
		LinkedList<TestMessage> msgIn = null;
		
		msgOut.add(new TestMessage("柯南", "偶像"));
		msgOut.add(new TestMessage("卡卡西", "好样的"));
		msgOut.add(new TestMessage("Android", "Android"));
		msgOut.add(new TestMessage("哈哈", "测试下喔"));
		fileRW.writeObject(path, fileName, msgOut);
		
		msgIn = fileRW.readObject(path,fileName);
		
		for(TestMessage temp:msgIn)	{
			System.out.println(temp.getName() + temp.getData());
		}
		
	}
	
	public FileRW(String dirPath, String filename) {
		this.dirPath = dirPath;
		this.filename = filename;
		if (creatDir()) {			
			creatFile();
		}
	}

	
	private boolean creatDir() {
		if (null != dirPath) {
			File path = new File(dirPath);
			if (path.exists()) {
				return true;
			}
			if (true == path.mkdirs() ) {
				return true;
			}
		}
		return false;
	}

	private void creatFile() {
		if (null != filename) {
			File file = new File(dirPath, filename);
			if (false == file.exists()) {
				try {
					file.createNewFile();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	

	/**
	* @Title: writeObject
	* @Description: Write a object to a file.
	* @param path the directory of the target file
	* @param filename the name of the target file
	* @param msg the type of the object
	* @return void
	* @throws
	*/
	private void writeObject(String path, String filename, LinkedList<TestMessage> msg) {
		File file = new File(path, filename);
		if (false == file.isFile()) {
			return ;
		}
		
		try {
			// The value "false" for FileOutputStream means that overwrite this file,
			// if it is "true",append the new data to this file.
			ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file,false));
			oos.writeObject(msg);
			oos.flush();
			oos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	* @Title: readObject
	* @Description: Read a object from a file.
	* @param path the directory of the target file
	* @param filename the name of the target file
	* @return LinkedList<TestMessage>
	* @throws
	*/
	@SuppressWarnings("unchecked")
	private LinkedList<TestMessage> readObject(String path, String filename) {
		File file = new File(path, filename);
		ObjectInputStream ois = null;
		LinkedList<TestMessage> msgAll = null;
		
		try {
			ois = new ObjectInputStream(new FileInputStream(file));
			try {
				msgAll = (LinkedList<TestMessage>)ois.readObject();
				
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				ois.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		return msgAll;
	}
}



测试程序中的消息包定义:

/**   
* @Title: TestMessage.java
* @Package com.file
* @Description: FileRW的消息流
* @author 慢跑学Android
* @date 2011-11-19 下午04:35:11
* @version V1.0   
*/
package com.file;


public class TestMessage implements java.io.Serializable {
	private String name;
	private String data;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getData() {
		return data;
	}
	public void setData(String data) {
		this.data = data;
	}
	public TestMessage(String name, String msg) {
		this.name = name;
		data = msg;
	}
}

程序运行结果:


参考资料:ObjectInputStream类和ObjectOutputStream类的使用


分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java源码包4

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java源码包3

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java源码包2

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA上百实例源码以及开源项目源代码

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。...

    java-object-diff:轻松进行diff和合并Java对象的库

    介绍java-object-diff是一个简单但功能强大的库,用于查找Java对象之间的差异。 它需要两个对象并生成一个树形结构,该结构表示对象及其子对象之间的任何差异。 然后可以遍历此树以提取更多信息或将更改应用于基础...

    JAVA_API1.6文档(中文)

    javax.swing.plaf.multi 提供了组合两个或多个外观的用户界面对象。 javax.swing.plaf.synth Synth 是一个可更换皮肤 (skinnable) 的外观,在其中可委托所有绘制。 javax.swing.table 提供用于处理 javax.swing....

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。...

    java 面试题 总结

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    java开源包11

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包6

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包9

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包4

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包101

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包5

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包8

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包10

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

Global site tag (gtag.js) - Google Analytics