Android 文件保存与读取

在android应用开发中,有时需要对应用中的数据进行保存;Android保存数据的方式有一下几种:

文件 SharedPreference SqlLite数据库 ContentProvider 网络;

对于文件存储数据,android为每个应用提供了独立的文件存储位置:data/data/${yourapp}/files;

保存数据到文件中时,可以通过context对象的openFileOutput(fileName, Context.MODE_PRIVATE);方法获取对应文件夹下指定文件的输出流;

然后通过outputStream的write(byte),将数据保存到文件中;

这个方法的第一个参数时指定的文件名,第二个参数时该文件被操作时的权限;Context.MODE_PRIVATE表示私有权限,代表该文件只能被本应用读写,并且新增的内容会覆盖原有内容;

还有三种权限分别是:

 Context.MODE_APPEND:检查时否存在文件,存在就追加模式,不存在就创建,也为私有模式,其他应用不可用。

 Context.MODE_WORLD_READABLE:该模式允许其他应用从该文件中读取内容。

 Context.MODE_WORLD_WRITEABLE:该模式允许其他应用相该文件写入内容。

另外:

 Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE:其他应用可读可写。

 Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE+ Context.MODE_APPEND:其他应用可读可写,可写的时候是追加模式;

具体例子:

MainActivity:

package tk.sweetvvck.fileopt;

import java.io.IOException;

import tk.sweetvvck.service.FileOptService;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		Button button = (Button) this.findViewById(R.id.save_button);
		button.setOnClickListener(this);
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public void onClick(View v) {
		if(v.getId() == R.id.save_button){
			EditText fileNameText = (EditText) this.findViewById(R.id.file_name_text);
			EditText fileContentText = (EditText) this.findViewById(R.id.file_content_text);
			String fileName = fileNameText.getText().toString();
			String fileContent = fileContentText.getText().toString();
			FileOptService service = new FileOptService(this.getApplicationContext()); 
			try {
				service.saveFile(fileName, fileContent);
				Toast.makeText(this.getApplicationContext(), R.string.save_successfully, Toast.LENGTH_SHORT).show();
			} catch (IOException e) {
				Toast.makeText(this.getApplicationContext(), R.string.save_failed, Toast.LENGTH_SHORT).show();
				e.printStackTrace();
			}
		}
	}

}

文件保存与读取业务类:

package tk.sweetvvck.service;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import android.content.Context;

/**
 * 
 * @author sweetvvck
 *
 */
public class FileOptService {
	private Context context;

	public FileOptService(Context context) {
		this.context = context;
	}

	/**
	 * 保存文件
	 * @param fileName
	 * @param fileContent
	 * @throws IOException
	 */
	public void saveFile(String fileName, String fileContent) throws IOException {
		FileOutputStream out = context.openFileOutput(fileName, Context.MODE_PRIVATE);
		out.write(fileContent.getBytes());
		out.close();
	}
	
	/**
	 * 读取文件中的内容
	 * @param fileName
	 * @return
	 * @throws IOException
	 */
	public String readFile(String fileName) throws IOException{
		FileInputStream in = context.openFileInput(fileName);
		ByteArrayOutputStream out = new ByteArrayOutputStream(); 
		byte[] buffer = new byte[1024];
		int len = 0;
		while((len = in.read(buffer)) != -1){
			out.write(buffer, 0, len);
		}
		byte[] data = out.toByteArray();
		in.close();
		out.close();
		return new String(data);
	}
	
}
单元测试类:

import java.io.IOException;

import tk.sweetvvck.service.FileOptService;
import android.test.AndroidTestCase;
import android.util.Log;

public class FileServiceTest extends AndroidTestCase {
	private static final String TAG = "FileServiceTest";
	
	public String testReadFile() throws IOException{
		FileOptService service = new FileOptService(this.getContext());
		String result = service.readFile("吧");
		Log.i(TAG, result);
		return null;
	}
	
}

Android 文件保存与读取_第1张图片









你可能感兴趣的:(android,文件)