Android中对操作的文件主要可以分为:File、XML、SharedPreference。
这篇博客主要介绍对File的操作:
1、MainActivity
package com.example.filetest; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText et_name; private EditText et_content; private Button sdBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); et_name = (EditText) findViewById(R.id.nameET); et_content = (EditText) findViewById(R.id.contentET); sdBtn = (Button) findViewById(R.id.sdcBT); } @Override protected void onResume() {//当界面切换到前台是执行这个方法... super.onResume(); //根据SD卡的状态设置按钮是否可用 if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ sdBtn.setEnabled(false); }else{ sdBtn.setEnabled(true); } } public void onClick(View view){ String name = et_name.getText().toString(); String content = et_content.getText().toString(); FileService service = new FileService(this); try{ switch (view.getId()) { case R.id.romBT: System.out.println("--------->保存到rom中"); service.saveToRom(name,content); break; case R.id.sdcBT: System.out.println("--------->保存到SD卡中"); service.saveToSD(name,content); break; } Toast.makeText(getApplicationContext(), "保存成功", 1).show(); }catch(Exception e){ e.printStackTrace(); Toast.makeText(getApplicationContext(), "保存失败", 1).show(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
2、FileService
package com.example.filetest; import java.io.FileOutputStream; import android.content.Context; import android.os.Environment; public class FileService { private Context context; public FileService(Context context){ this.context = context; } public void saveToSD(String name, String content) throws Exception{ /** * 创建输出流指定SD卡所在的位置 * Environment.getExternalStorageDirectory():获取SD卡的位置,为/mnt/sdcard * */ FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/" + name); fos.write(content.getBytes()); fos.close(); } public void saveToRom(String name, String content) throws Exception{ /** * 如果打开成功,会在/data/data/包名/下创建爱你一个files目录,并把文件放在里面 * * Context.MODE_PRIVATE: 只有自己能访访问所创建的文件 * Context.MODE_WORLD_READABLE : 全世界都可以读,也就是说,谁都可以读 * Context.MODE_WORLD_WRITEABLE : 全世界都可以写,也就是说,谁都可以写. * Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE: 全世界都可以进行读写... * Context.MODE_APPEND: 私有 && 只能追加 * * 创建的时候设置成了Context.MODE_PRIVATE,这时候,别的程序想读想写都不可以了,只能是他自己进行读写... */ FileOutputStream fos = context.openFileOutput(name, Context.MODE_WORLD_READABLE);//打开 /data/data/应用的报名/的一个文件 fos.write(content.getBytes());//往ROM中写内容不需要权限 fos.close(); } }
3、FileTest(用于测试)
package com.example.filetest; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import android.content.Context; import android.test.AndroidTestCase; public class FileTest extends AndroidTestCase { /** * 自己读(正常结果是:可以成功).用来测试Context.MODE_PRIVATE是否正确作用 * @throws Exception */ public void testRead() throws Exception{ FileInputStream fis = getContext().openFileInput("wr.txt"); // FileInputStream in = new FileInputStream("/data/data/com.exmaple.filetest/files/hjd.txt");//这种写法和上面那种写法是等价的 ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while((len = fis.read(buffer)) != -1){ baos.write(buffer,0,len); } fis.close(); baos.close(); String content = new String(baos.toByteArray()); System.out.println("---->content: " + content); } public void testWrite() throws Exception{ FileOutputStream fos = new FileOutputStream("/data/data/com.example.filetest/files/hjd.txt"); String content = "hahahahah"; fos.write(content.getBytes()); fos.close(); } }
二、
Context的几种MODE其实可以从DDMS中的/data/data/应用名/files/文件可以看到其效果
源码下载:http://download.csdn.net/detail/caihongshijie6/7613405