从零开始学android<数据存储(3)External Storage外部存储.三十七.>

所谓的外部存储External Storage就是将数据文件保存在SD卡上。

1.但是在保存数据时需要先对SD卡的状态进行判断。

使用Environment.getExternalStorageState()可以SD卡的运行状态

分别有一下的状态

MEDIA_UNKNOWNMEDIA_REMOVEDMEDIA_UNMOUNTEDMEDIA_CHECKINGMEDIA_NOFSMEDIA_MOUNTEDMEDIA_MOUNTED_READ_ONLYMEDIA_SHARED,MEDIA_BAD_REMOVAL, or MEDIA_UNMOUNTABLE.

我们一般使用的是

MEDIA_MOUNTED可操作

2.获取SD卡的跟目录

这里可以使用Environment.getExternalStorageDirectory()方法来获取

3.判断路径是否存在,并进行相应操作

使用file.getParentFile().exists()来判断文件路径是否存在,如果不存在就创建

file.getParentFile().mkdir();

4.使用outputstream,Writer,printstream等方法进行数据的写入操作


5.文件的读取方法同上



XML文件


<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="106dp"
        android:text="保存SD卡文件" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="读取SD卡文件" />

</RelativeLayout>
</span>


JAVA文件

<span style="font-size:18px;">package com.example.externalstorage;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Scanner;

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.Toast;

public class MainActivity extends Activity {
	private Button saveData, getData;
	public static final String FILENAME = "flyou.dat";// 文件名
	public static final String FILEDIR = "myFile";// SD卡下的文件路径
	private PrintStream print;// 初始化打印流
	private Scanner input;// 初始化输入流

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 实例化按钮
		saveData = (Button) this.findViewById(R.id.button1);
		getData = (Button) this.findViewById(R.id.button2);

		// 储存文件到SD卡
		saveData.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				// 获取sd卡的状态并判断是否可用
				String state = Environment.getExternalStorageState();
				if (Environment.MEDIA_MOUNTED.equals(state)) {
					// 获得Sd卡跟目录
					String SDpath = Environment.getExternalStorageDirectory()
							.toString();
					// 拼凑完整的文件地址
					String path = SDpath + File.separator + FILEDIR
							+ File.separator + FILENAME;
					// System.out.println(path);
					// 获得File对象
					File file = new File(path);
					// 判断路径是否存在入不存在则自动创建
					if (!file.getParentFile().exists()) {
						file.getParentFile().mkdir();
					}
					try {
						// 使用打印流重定向写入位置,向文件内写入数据
						print = new PrintStream(file);
						print.print("这是使用打印流在SDka上存取的数据文件");
						print.println("\r\n 第二行数据");// 在文件中默认"\r\n"为换行符

					} catch (FileNotFoundException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} finally {
						// 关闭打印流
						Toast.makeText(MainActivity.this, "文件保存成功,文件位置:"+path, 2).show();
						print.close();
					}

				}
			}
		});

		// 读取文件

		getData.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String state = Environment.getExternalStorageState();
				if (Environment.MEDIA_MOUNTED.equals(state)) {
					String SDpath = Environment.getExternalStorageDirectory()
							.toString();
					String path = SDpath + File.separator + FILEDIR
							+ File.separator + FILENAME;

					File file = new File(path);
					try {
						// 创建SCanner重写输出地址为文件
						input = new Scanner(file);
						// 判断是否有下一行数据
						while (input.hasNext()) {
							String info = (String) input.next();
							// 根据土司显示读取到的数据
							Toast.makeText(MainActivity.this, info, 2).show();
						}
					} catch (FileNotFoundException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} finally {
						input.close();
					}
				}

			}
		});
	}

}
</span>

最后还必须给android工程配置权限

android.permission.WRITE_EXTERNAL_STORAGE

从零开始学android<数据存储(3)External Storage外部存储.三十七.>


从零开始学android<数据存储(3)External Storage外部存储.三十七.>



将文件导出后用记事本打开

从零开始学android<数据存储(3)External Storage外部存储.三十七.>

NOTE:

如果只进行文件的读取操作,需要配置android.permission.READ_EXTERNAL_STORAGE

如果同时进行读取操作则只需进行配置android.permission.WRITE_EXTERNAL_STORAGE就可以了


下节预报:Sqlite数据库存储



从零开始学android<数据存储(3)External Storage外部存储.三十七.>

上一篇:iOS社交app技术合伙人笔试题


下一篇:安卓学习-界面-使用点9图制作可拉升图片