首页 > 代码库 > (Android review)文件的读写(对File的操作)

(Android review)文件的读写(对File的操作)

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