Java 如何对文件进行多个Object对象流的读写操作
思路:把已经序列化的对象存入容器(如LinkedList<?>)中,然后用ObjectInputStream和ObjectOutputStream对这个实例化的LinkedList<?>对象进行读写。
1 /** 2 * @Title: FileRW.java 3 * @Package com.file 4 * @Description: 文件、文件夹的创建、写入练习。读写是使用对象流实现。 5 * @author 慢跑学Android 6 * @date 2011-11-19 下午03:53:01 7 * @version V1.0 8 */ 9 package com.file; 10 11 import java.io.File; 12 import java.io.FileInputStream; 13 import java.io.FileNotFoundException; 14 import java.io.FileOutputStream; 15 import java.io.IOException; 16 import java.io.ObjectInputStream; 17 import java.io.ObjectOutputStream; 18 import java.util.LinkedList; 19 20 21 public class FileRW { 22 private String dirPath; 23 private String filename; 24 25 public static void main(String[] args) { 26 String path = "C:\\晓声"; 27 String fileName = "test.txt"; 28 FileRW fileRW = new FileRW(path, fileName); 29 LinkedList<TestMessage> msgOut = new LinkedList<TestMessage>(); 30 LinkedList<TestMessage> msgIn = null; 31 32 msgOut.add(new TestMessage("柯南", "偶像")); 33 msgOut.add(new TestMessage("卡卡西", "好样的")); 34 msgOut.add(new TestMessage("Android", "Android")); 35 msgOut.add(new TestMessage("哈哈", "测试下喔")); 36 fileRW.writeObject(path, fileName, msgOut); 37 38 msgIn = fileRW.readObject(path,fileName); 39 40 for(TestMessage temp:msgIn) { 41 System.out.println(temp.getName() + temp.getData()); 42 } 43 44 } 45 46 public FileRW(String dirPath, String filename) { 47 this.dirPath = dirPath; 48 this.filename = filename; 49 if (creatDir()) { 50 creatFile(); 51 } 52 } 53 54 55 private boolean creatDir() { 56 if (null != dirPath) { 57 File path = new File(dirPath); 58 if (path.exists()) { 59 return true; 60 } 61 if (true == path.mkdirs() ) { 62 return true; 63 } 64 } 65 return false; 66 } 67 68 private void creatFile() { 69 if (null != filename) { 70 File file = new File(dirPath, filename); 71 if (false == file.exists()) { 72 try { 73 file.createNewFile(); 74 } catch (IOException e) { 75 e.printStackTrace(); 76 } 77 } 78 } 79 } 80 81 82 /** 83 * @Title: writeObject 84 * @Description: Write a object to a file. 85 * @param path the directory of the target file 86 * @param filename the name of the target file 87 * @param msg the type of the object 88 * @return void 89 * @throws 90 */ 91 private void writeObject(String path, String filename, LinkedList<TestMessage> msg) { 92 File file = new File(path, filename); 93 if (false == file.isFile()) { 94 return ; 95 } 96 97 try { 98 // The value "false" for FileOutputStream means that overwrite this file, 99 // if it is "true",append the new data to this file. 100 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file,false)); 101 oos.writeObject(msg); 102 oos.flush(); 103 oos.close(); 104 } catch (FileNotFoundException e) { 105 e.printStackTrace(); 106 } catch (IOException e) { 107 e.printStackTrace(); 108 } 109 } 110 111 /** 112 * @Title: readObject 113 * @Description: Read a object from a file. 114 * @param path the directory of the target file 115 * @param filename the name of the target file 116 * @return LinkedList<TestMessage> 117 * @throws 118 */ 119 @SuppressWarnings("unchecked") 120 private LinkedList<TestMessage> readObject(String path, String filename) { 121 File file = new File(path, filename); 122 ObjectInputStream ois = null; 123 LinkedList<TestMessage> msgAll = null; 124 125 try { 126 ois = new ObjectInputStream(new FileInputStream(file)); 127 try { 128 msgAll = (LinkedList<TestMessage>)ois.readObject(); 129 130 } catch (ClassNotFoundException e) { 131 e.printStackTrace(); 132 } 133 } catch (FileNotFoundException e) { 134 e.printStackTrace(); 135 } catch (IOException e) { 136 e.printStackTrace(); 137 } finally { 138 try { 139 ois.close(); 140 } catch (IOException e) { 141 e.printStackTrace(); 142 } 143 } 144 145 return msgAll; 146 } 147 }
1 /** 2 * @Title: TestMessage.java 3 * @Package com.file 4 * @Description: FileRW的消息流 5 * @author 慢跑学Android 6 * @date 2011-11-19 下午04:35:11 7 * @version V1.0 8 */ 9 package com.file; 10 11 12 public class TestMessage implements java.io.Serializable { 13 private String name; 14 private String data; 15 16 public String getName() { 17 return name; 18 } 19 public void setName(String name) { 20 this.name = name; 21 } 22 public String getData() { 23 return data; 24 } 25 public void setData(String data) { 26 this.data = data; 27 } 28 public TestMessage(String name, String msg) { 29 this.name = name; 30 data = msg; 31 } 32 }