数据存储之文件存储

 对于文件的存储操作,在Android中有两种形式:

1.直接利用Activity提供的文件操作方法。此类操作的所有文件路径只能是“\data\data\<package name>\files\文件名称".

2.利用Java IO 操作流执行操作。此类操作的文件可以是任意路径(包括sdcard)下,但是需要为其操作授权。


一、利用Activity类操作数据文件

Activity类对文件操作的支持
方法普通描述
public FileInputStream openFileInput(String name)普通设置要打开的文件输入流
public FileOutputStream openFileOutput(String name,int mode)普通设置要打开的文件输出流,指定操作的模式,可以是0,MODE_APPEND、MOSE_PRIVATE、
MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE

这里要注意:使用openFileInput()和openFileOutput()方法进行写入\读取写入操作时,接收的文件名称中不能包括任何的分隔符(\),只能写文件名称,而文件会默认保存在”data\data\<package name>\files\"目录中。

下面通过openFileOutput()方法演示一个输出的操作
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;

import android.app.Activity;
import android.os.Bundle;

public class FileOperate extends Activity {
	private static final String FILENAME = "mldn.txt" ;	// 设置文件名称
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		
                FileOutputStream output = null ;	// 接收文件输出对象
		try {
			output = super.openFileOutput(FILENAME, Activity.MODE_PRIVATE) ;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		PrintStream out = new PrintStream(output) ; 	// 输出方便
	
                out.println("姓名:李兴华;") ;
		out.println("年龄:30;") ;
	
		out.close() ;	// 资源一定要关闭
	}
}

下面利用openFileInput()方法实现一个文件读取操作(布局文件仅一个TextView,此处不加赘述)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class FileOperate extends Activity {
	
	private static final String FILENAME = "mldn.txt" ;	// 设置文件名称
	private TextView msg = null ;		// 文本组件
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		
		this.msg = (TextView) super.findViewById(R.id.msg) ; 
		
		FileInputStream input = null ;
		try {
			input = super.openFileInput(FILENAME) ;	// 取得输入流
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		Scanner scan = new Scanner(input) ;
		while(scan.hasNext()) {
			this.msg.append(scan.next() + "\n") ;
		}
		
		scan.close() ;//关闭输入流
	}
}


二、利用IO流操作文件

向sdcard上保存文件
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;

import android.app.Activity;
import android.os.Bundle;

public class FileOperate extends Activity {
	private static final String FILENAME = "/mnt/sdcard/mldndata/mymldn.txt" ;	// 设置文件名称
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		File file = new File(FILENAME) ; 	// 定义要操作的文件
		if(!file.getParentFile().exists()) {
			file.getParentFile().mkdirs() ;	// 创建父文件夹路径
		}
		PrintStream out = null;
		try {
			out = new PrintStream(new FileOutputStream(file));
			out.println("北京魔乐科技软件学院(MLDN,www.MLDNJAVA.cn),讲师:李兴华");
		} catch (Exception e) {
			e.printStackTrace() ;
		} finally {	// 一定要关闭流
			if(out != null) {
				out.close() ;
			}
		}
	}
}

另外,本程序由于要使用到外部(sdcard),所以用户在操作之前还需要为程序配置相应的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

读取文件内容:
import java.io.File;
import java.io.FileInputStream;
import java.util.Scanner;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.TextView;
import android.widget.Toast;

public class FileOperate extends Activity {
	private static final String FILENAME = "mymldn.txt" ;	// 设置文件名称
	private static final String DIR = "mldndata" ;	// 操作文件夹的名称
	private TextView msg = null ;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		this.msg = (TextView) super.findViewById(R.id.msg) ;
		
		if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
			File file = new File(Environment.getExternalStorageDirectory()
					+ File.separator + DIR + File.separator + FILENAME); // 定义要操作的文件
			if (!file.getParentFile().exists()) {
				file.getParentFile().mkdirs(); // 创建父文件夹路径
			}
			Scanner scan = null ;
			try {
				scan = new Scanner(new FileInputStream(file)) ;
				while(scan.hasNext()) {
					this.msg.append(scan.next() + "\n") ;
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally { // 一定要关闭流
				if (scan != null) {
					scan.close();
				}
			}
		} else {
			Toast.makeText(this, "保存失败,SD卡不存在!", Toast.LENGTH_LONG).show() ;
		}
	}
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值