这是一个用来读写文件的demo. 用户界面如下:

用到的字符串资源: res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">文件读写</string> <string name="action_settings">Settings</string> <string name="file_name">文件名</string> <string name="content_label">文件内容</string> <string name="save_label">保存</string> <string name="save_successful">保存成功</string> <string name="save_fail">保存失败</string> </resources>
用户界面: res/layout/activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/file_name" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:id="@+id/file_name" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/content_label" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/file_content" android:inputType="textMultiLine" android:minLines="3" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="10dp" android:paddingRight="10dp" android:id="@+id/save_btn_view" android:text="@string/save_label" /> </LinearLayout>
主activity: MainActivity.java
...... public class MainActivity extends Activity { private EditText fileNameView; private EditText fileContentView; private FileService fileService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fileNameView = (EditText) findViewById(R.id.file_name); fileContentView = (EditText) findViewById(R.id.file_content); fileService = new FileService(); fileService.setContext(getApplicationContext()); Button saveBtn = (Button) findViewById(R.id.save_btn_view); saveBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String fileName = fileNameView.getText().toString(); String content = fileContentView.getText().toString(); try { fileService.saveFile(fileName, content); } catch (Exception e) { Toast.makeText(getApplicationContext(), R.string.save_fail, Toast.LENGTH_SHORT).show(); e.printStackTrace(); } Toast.makeText(getApplicationContext(), R.string.save_successful, Toast.LENGTH_SHORT).show(); } }); } }
FileService.java
package com.lk.service; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import android.content.Context; import android.util.Log; public class FileService { private static String TAG = "FileManager"; private Context context; /** * 写文件 * @param fileName * @param content * @throws Exception */ public void saveFile(String fileName, String content) throws Exception { Log.i(TAG, "fileName = " + fileName + ", content = " + content); FileOutputStream fos = null; try { //Context.MODE_PRIVATE表示创建的文件仅能被当前应用读写,写的方式是覆盖 fos = context.openFileOutput(fileName, Context.MODE_PRIVATE); byte[] buffer = content.getBytes(); fos.write(buffer); } catch (Exception e) { throw new Exception(e); } finally { if(fos != null) { fos.close(); } } Log.i(TAG, "leave successful"); } /** * 读文件 * @param fileName * @return * @throws Exception */ public String readFile(String fileName) throws Exception { Log.i(TAG, "fileName = " + fileName); FileInputStream fis = null; ByteArrayOutputStream temp = new ByteArrayOutputStream(); String content = null; try { fis = context.openFileInput(fileName); byte[] buffer = new byte[1024]; int length = 0; while((length = fis.read(buffer)) > 0) { temp.write(buffer, 0, length); } content = new String(temp.toByteArray()); } catch (Exception e) { throw new Exception(e); } finally { if(temp != null) { temp.close(); } if(fis != null) { fis.close(); } } Log.i(TAG, "leave successful, content = " + content); return content; } public Context getContext() { return context; } public void setContext(Context context) { this.context = context; } }
当用户输入内容并保存后,就可以在 /data/data/package_name/files/ 目录下就能找到该文件了。
下面再来总结一下文件操作模式:
Context.MODE_PRIVATE: 表示创建的文件仅能被当前应用读写,写的方式是覆盖
Context.MODE_APPEND: 表示创建的文件仅能被当前应用读写,写的方式是追加
Context.MODE_WORLD_READABLE: 表示创建的文件允许其他所有应用读,不允许写,写的方式是覆盖
Context.MODE_WORLD_WRITEABLE: 表示创建的文件允许其他所有应用写,不允许读,写的方式是覆盖
Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE: 表示创建的文件允许所有应用读写
浙公网安备 33010602011771号