Andorid存储方式---读写文件

在手机Rom和SDCard保存文件:


1.创建界面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/nameET"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="请输入文件名"
        android:inputType="text" />

    <EditText
        android:id="@+id/contentET"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="请输入文件内容"
        android:inputType="textMultiLine"
        android:maxLines="5"
        android:minLines="3" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/sdcBT"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="保存到SD卡" />

        <Button
            android:id="@+id/romBT"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="保存到ROM" />
    </LinearLayout>

</LinearLayout>

2Activity类

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
	private EditText nameET;
	private EditText contentET;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		nameET = (EditText) findViewById(R.id.nameET);
		contentET = (EditText) findViewById(R.id.contentET);

	}

	protected void onResume() { // 当界面切换到前台时执行
		super.onResume();

		// 根据SD卡状态, 设置按钮是否可用
		findViewById(R.id.sdcBT).setEnabled(
				Environment.getExternalStorageState().equals(
						Environment.MEDIA_MOUNTED));
	}

	public void onClick(View view) {
		try {
			String name = nameET.getText().toString();
			String content = contentET.getText().toString();
			FileService service = new FileService(this);

			switch (view.getId()) {
			case R.id.sdcBT:
				System.out.println("SD卡");
				service.saveToSDCard(name, content);
				break;
			case R.id.romBT:
				System.out.println("ROM");
				service.saveToRom(name, content);
				break;
			}

			Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_SHORT)
					.show();
		} catch (Exception e) {
			e.printStackTrace();
			Toast.makeText(getApplicationContext(), "保存失败", Toast.LENGTH_SHORT)
					.show();
		}
	}
}


3.FileService文件:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import android.content.Context;
import android.os.Environment;

public class FileService {
	private Context context;

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

	public void saveToSDCard(String name, String content) throws IOException {
		// 获取SD卡所在目录(兼容所有版本)
		//2.1之前sd卡根目录为/sdcard
		//2.1之后sd卡根目录为/mnt/sdcard
		File file = new File(Environment.getExternalStorageDirectory(), name);	//获取外存储设备的目录
		FileOutputStream fos = new FileOutputStream(file);			// 创建输出流, 指向SD卡所在目录
		fos.write(content.getBytes());						// 写出文件内容, 默认UTF-8
		fos.close();
		
		System.out.println("总空间: " + file.getTotalSpace());
		System.out.println("剩余空间: " + file.getFreeSpace());
	}

	public void saveToRom(String name, String content) throws IOException {
		/*
		 * Context_MODE_PRIVATE表示 文件为私有模式,不能从别的工程或者类来读或者写
		 * Context.MODE_WORLD_READABLE表示只读
		 * context.MODE_WORLD_WRITEABLE表示之可写
		 * Context.MODE_APPEND表示写文件是追加,不是覆盖,且文件为私有,上面三种模式都是覆盖
		 */
	
		FileOutputStream fos = context.openFileOutput(name, Context.MODE_PRIVATE);
		fos.write(content.getBytes());
		fos.close();
	}

}

运行效果如下:




如果要读取手机文件内的内容:


public void testRead() throws IOException {
		FileInputStream fis = new FileInputStream("/data/data/cn.itcast.file/files/private.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);
	}



原文地址:https://www.cnblogs.com/fzll/p/3954622.html