程序员人生 网站导航

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

栏目:互联网时间:2014-09-17 20:15:46

所谓的外部存储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(" 第二行数据");// 在文件中默认" "为换行符 } 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






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


NOTE:

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

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


下节预报:Sqlite数据库存储



------分隔线----------------------------
------分隔线----------------------------

最新技术推荐