注: 在Activity中有 getFileDir() 和 getCacheDir(); 方法可以获得当前的手机自带的存储空间中的当前包文件的路径
getFileDir() ----- /data/data/cn.xxx.xxx(当前包)/files
getCacheDir() ----- /data/data/cn.xxx.xxx(当前包)/cache
1.
2. 1. 编写文件读取与写入功能实现类 FileService
3.
4. package cn.android.service;
5.
6. import java.io.ByteArrayOutputStream;
7. import java.io.FileInputStream;
8. import java.io.FileOutputStream;
9.
10. import android.content.Context;
11. import android.util.Log;
12.
13. /**
14. * 文件保存与读取功能实现类
15. * @author Administrator
16. *
17. * 2010-6-28 下午08:15:18
18. */
19. public class FileService {
20.
21. public static final String TAG = "FileService";
22. private Context context;
23.
24. //得到传入的上下文对象的引用
25. public FileService(Context context) {
26. this.context = context;
27. }
28.
29. /**
30. * 保存文件
31. *
32. * @param fileName 文件名
33. * @param content 文件内容
34. * @throws Exception
35. */
36. public void save(String fileName, String content) throws Exception {
37.
38. // 由于页面输入的都是文本信息,所以当文件名不是以.txt后缀名结尾时,自动加上.txt后缀
39. if (!fileName.endsWith(".txt")) {
40. fileName = fileName + ".txt";
41. }
42.
43. byte[] buf = fileName.getBytes("iso8859-1");
44.
45. Log.e(TAG, new String(buf,"utf-8"));
46.
47. fileName = new String(buf,"utf-8");
48.
49. Log.e(TAG, fileName);
50.
51. // Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
52. // Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
53. // Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
54. // MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
55. // 如果希望文件被其他应用读和写,可以传入:
56. // openFileOutput("output.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
57.
58. FileOutputStream fos = context.openFileOutput(fileName, context.MODE_PRIVATE);
59. fos.write(content.getBytes());
60. fos.close();
61. }
62.
63. /**
64. * 读取文件内容
65. *
66. * @param fileName 文件名
67. * @return 文件内容
68. * @throws Exception
69. */
70. public String read(String fileName) throws Exception {
71.
72. // 由于页面输入的都是文本信息,所以当文件名不是以.txt后缀名结尾时,自动加上.txt后缀
73. if (!fileName.endsWith(".txt")) {
74. fileName = fileName + ".txt";
75. }
76.
77. FileInputStream fis = context.openFileInput(fileName);
78. ByteArrayOutputStream baos = new ByteArrayOutputStream();
79.
80. byte[] buf = new byte[1024];
81. int len = 0;
82.
83. //将读取后的数据放置在内存中---ByteArrayOutputStream
84. while ((len = fis.read(buf)) != -1) {
85. baos.write(buf, 0, len);
86. }
87.
88. fis.close();
89. baos.close();
90.
91. //返回内存中存储的数据
92. return baos.toString();
93.
94. }
95.
96. }
97.
98. 2. 编写Activity类:
99. package cn.android.test;
100.
101. import android.app.Activity;
102. import android.os.Bundle;
103. import android.util.Log;
104. import android.view.View;
105. import android.widget.Button;
106. import android.widget.EditText;
107. import android.widget.Toast;
108. import cn.android.service.FileService;
109.
110. public class TestAndroidActivity extends Activity {
111. /** Called when the activity is first created. */
112.
113. //得到FileService对象
114. private FileService fileService = new FileService(this);
115. //定义视图中的filename输入框对象
116. private EditText fileNameText;
117. //定义视图中的contentText输入框对象
118. private EditText contentText;
119. //定义一个土司提示对象
120. private Toast toast;
121.
122.
123. @Override
124. public void onCreate(Bundle savedInstanceState) {
125. super.onCreate(savedInstanceState);
126. setContentView(R.layout.main);
127.
128. //得到视图中的两个输入框和两个按钮的对象引用
129. Button button = (Button)this.findViewById(R.id.button);
130. Button read = (Button)this.findViewById(R.id.read);
131. fileNameText = (EditText) this.findViewById(R.id.filename);
132. contentText = (EditText) this.findViewById(R.id.content);
133.
134. //为保存按钮添加保存事件
135. button.setOnClickListener(new View.OnClickListener() {
136. @Override
137. public void onClick(View v) {
138.
139. String fileName = fileNameText.getText().toString();
140. String content = contentText.getText().toString();
141.
142. //当文件名为空的时候,提示用户文件名为空,并记录日志。
143. if(isEmpty(fileName)) {
144. toast = Toast.makeText(TestAndroidActivity.this, R.string.empty_filename, Toast.LENGTH_LONG);
145. toast.setMargin(RESULT_CANCELED, 0.345f);
146. toast.show();
147. Log.w(fileService.TAG, "The file name is empty");
148. return;
149. }
150.
151. //当文件内容为空的时候,提示用户文件内容为空,并记录日志。
152. if(isEmpty(content)) {
153. toast = Toast.makeText(TestAndroidActivity.this, R.string.empty_content, Toast.LENGTH_LONG);
154. toast.setMargin(RESULT_CANCELED, 0.345f);
155. toast.show();
156. Log.w(fileService.TAG, "The file content is empty");
157. return;
158. }
159.
160. //当文件名和内容都不为空的时候,调用fileService的save方法
161. //当成功执行的时候,提示用户保存成功,并记录日志
162. //当出现异常的时候,提示用户保存失败,并记录日志
163. try {
164. fileService.save(fileName, content);
165. toast = Toast.makeText(TestAndroidActivity.this, R.string.success, Toast.LENGTH_LONG);
166. toast.setMargin(RESULT_CANCELED, 0.345f);
167. toast.show();
168. Log.i(fileService.TAG, "The file save successful");
169. } catch (Exception e) {
170. toast = Toast.makeText(TestAndroidActivity.this, R.string.fail, Toast.LENGTH_LONG);
171. toast.setMargin(RESULT_CANCELED, 0.345f);
172. toast.show();
173. Log.e(fileService.TAG, "The file save failed");
174. }
175.
176. }
177. });
178.
179.
180. //为读取按钮添加读取事件
181. read.setOnClickListener(new View.OnClickListener() {
182. @Override
183. public void onClick(View v) {
184.
185. //得到文件名输入框中的值
186. String fileName = fileNameText.getText().toString();
187.
188. //如果文件名为空,则提示用户输入文件名,并记录日志
189. if(isEmpty(fileName)) {
190. toast = Toast.makeText(TestAndroidActivity.this, R.string.empty_filename, Toast.LENGTH_LONG);
191. toast.setMargin(RESULT_CANCELED, 0.345f);
192. toast.show();
193. Log.w(fileService.TAG, "The file name is empty");
194. return;
195. }
196.
197. //调用fileService的read方法,并将读取出来的内容放入到文本内容输入框里面
198. //如果成功执行,提示用户读取成功,并记录日志。
199. //如果出现异常信息(例:文件不存在),提示用户读取失败,并记录日志。
200. try {
201. contentText.setText(fileService.read(fileName));
202. toast = Toast.makeText(TestAndroidActivity.this, R.string.read_success, Toast.LENGTH_LONG);
203. toast.setMargin(RESULT_CANCELED, 0.345f);
204. toast.show();
205. Log.i(fileService.TAG, "The file read successful");
206. } catch (Exception e) {
207. toast = Toast.makeText(TestAndroidActivity.this, R.string.read_fail, Toast.LENGTH_LONG);
208. toast.setMargin(RESULT_CANCELED, 0.345f);
209. toast.show();
210. Log.e(fileService.TAG, "The file read failed");
211. }
212. }
213. });
214.
215.
216. }
217.
218. //编写一个isEmpty方法,判断字符串是否为空
219. private boolean isEmpty(String s) {
220. if(s == null || "".equals(s.trim())) {
221. return true;
222. }
223. return false;
224. }
225.
226. }