注意:

第一步要先添加权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

步骤:

文件流

1、写:

a)创建文件输出流(PATH)

b)将内容写入文件输出流(str.getBytes())

bb)关闭流

2、读:

a)创建文件输入流

b)创建字节数组缓存(ByteArrayBufferarrayBuffer = new ByteArrayBuffer(1000);)——>为了后面分段读取时拼接数据

c)创建字节数组buffer(1024)(建立变量len=0)

d)循环读入——while(-1!=(len=fis.read(buffer)){arrayBuffer.append(buffer, 0, len) }

e)通过创建String的形式将字节数组转换成字符串(new String(arrayBuffer.toByteArray()))

f)将内容显示在文本框中

ff)关闭流

对象流

1、写:

a)创建对象

b)创建文件输出流(PATH)

c)创建对象输出流(ObjectOutputStream,将文件输出流嵌套在里面)

d)将对象写入对象输出流(oos.writeObject(person);)

dd)关闭最外层流(对象流)

2、读:

a)创建文件输入流

b)创建对象输入流

c)将读到的Object对象强转成所需对象(Personperson = (Person)ois.readObject();)

d)在文本框中显示对象的各项内容

dd)关闭最外层流(对象流)

代码实现(文件流):

1、往sdcard中写入数据

FileOutputStreamfos = null;

try{

fos= new FileOutputStream(PATH);

Stringstr = writeToSdcard.getText().toString();

//将字符串打散写入流中

fos.write(str.getBytes());

}catch (FileNotFoundException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}catch (IOException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}finally{

if(fos!=null){

try{

//如果path有问题,会跳到finally中,而fos此时为null,会发生空指针异常

fos.close();

}catch (IOException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

2、从sdcard中读取数据

FileInputStreamfis = null;

//1000表示的是预留空间

ByteArrayBufferarrayBuffer = new ByteArrayBuffer(1000);

try{

fis= new FileInputStream(PATH);

byte[]buffer = new byte[1024];

intlen = 0;

while(-1!=(len=fis.read(buffer))){

//拼接

arrayBuffer.append(buffer,0, len);

}

//通过新建字符串的形式将arrayBuffer转换成字节数组

StringreadBuffer = new String(arrayBuffer.toByteArray());

writeToSdcard.setText(readBuffer);

}catch (FileNotFoundException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}catch (IOException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}finally{

if(fis!=null){

try{

fis.close();

}catch (IOException e) {

//TODO Auto-generated catch block

e.printStackTrace();