
正文
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 }







