Android读写文件操作

Android数据存储与文件读写教程
本教程详细介绍了在Android应用中使用内存文件和SD卡进行数据存储的方法,包括读取和写入操作,以及如何在SD卡上进行文件读写。

最近在学习Android中的数据存储以及IO部分。下面写了两个关于文件存储的Demo

第一个是读写内存中的文件。

主要步骤:

1、如果是读取文件,调用的是Android的ApI中的openFileInput(String name),返回FileInputStream()对象;

   其余操作步骤跟javaSE中文件的读取方法一致。

2、如果是写入文件,调用Andoroid的API中的openFIleOutput(String name,int MODE),后面的参数是设置文件写入权限。然后和javaSE中的写入方法一致

下面值实例(布局就是两个button和editText,TextView):

activity_main.xml

<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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/writeText" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="写入文件"
        android:id="@+id/write"
        android:layout_below="@+id/writeText"
        android:layout_alignStart="@+id/read" />
    <TextView
        android:id="@+id/readText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/write"
        android:layout_alignParentStart="true"
        android:layout_marginTop="76dp" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="读取文件"
        android:id="@+id/read"
        android:layout_centerVertical="true"
        android:layout_alignParentStart="true"
        android:layout_marginStart="85dp" />
    <Button
        android:id="@+id/nextActivity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="操作sd卡"
        android:layout_alignParentBottom="true"
        android:layout_alignStart="@+id/read"
        android:layout_marginBottom="56dp" />

</RelativeLayout>
MainActivity.java

package lzl.edu.com.filedemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

public class MainActivity extends Activity implements View.OnClickListener{

    private Button mRead,mWrite,mnextActivity;
    private EditText mWriteText;
    private TextView mReadText;
    private final String FILE_NAME="lzl.xy";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mRead = (Button)findViewById(R.id.read);
        mWrite = (Button)findViewById(R.id.write);
        mReadText=(TextView)findViewById(R.id.readText);
        mWriteText=(EditText)findViewById(R.id.writeText);
        mnextActivity=(Button)findViewById(R.id.nextActivity);

        mnextActivity.setOnClickListener(this);
        mRead.setOnClickListener(this);
        mWrite.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.read:
                //找到该文件,获取内容。
                FileInputStream fis=null;
                StringBuffer sb = null;
                try{
                    fis = openFileInput(FILE_NAME);
                    byte[] by = new byte[1024];
                    int line = 0;
                    sb = new StringBuffer();
                    while((line = fis.read(by))!=-1){
                        sb.append(new String(by,0,line));
                    }
                    Toast.makeText(this,"写入成功",Toast.LENGTH_LONG).show();
                    mReadText.setText(sb.toString());
                }catch (IOException e){
                    e.printStackTrace();
                }finally {
                    try {
                        if (fis != null)
                            fis.close();
                    }catch (IOException e){
                        e.printStackTrace();
                    }
                }
                break;
            case R.id.write:
                FileOutputStream fos=null;
                try {
                    String content = mWriteText.getText().toString();//从编辑框 中获取内容写到文件中
                    Log.i("content---",content);
                    fos = openFileOutput(FILE_NAME, MODE_APPEND);
                    PrintStream ps = new PrintStream(fos);
                    ps.println(content);
                }catch (IOException e){
                    e.printStackTrace();
                }finally {
                    try {
                        if (fos != null)
                            fos.close();
                    }catch (IOException e){
                        e.printStackTrace();
                    }
                }
                break;
            case R.id.nextActivity:
                Intent intent = new Intent(MainActivity.this,ReadSDCard.class);
                startActivity(intent);
                break;
        }
    }
}

下面是操作SD卡的文件读写

首先注意的是:sd要在AndroidManifest.xml文件中设置读写、创建的权限

 <!--在sd卡中,添加创建于删除文件的权限-->
    <uses-permission android:name="ANDROID.PERMISSION.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <!--在sd卡中,写入文件的权限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

activity_read_sdcard.xml

<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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="lzl.edu.com.filedemo.ReadSDCard">

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/writeText_sd" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="写入sd卡文件"
        android:id="@+id/write_sd"
        android:layout_below="@+id/writeText_sd"
        android:layout_alignStart="@+id/read_sd" />
    <TextView
        android:id="@+id/readText_sd"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/write_sd"
        android:layout_alignParentStart="true"
        android:layout_marginTop="76dp" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="读取sd卡文件"
        android:id="@+id/read_sd"
        android:layout_centerVertical="true"
        android:layout_alignParentStart="true"
        android:layout_marginStart="85dp" />

</RelativeLayout>
ReadSDCard.java

package lzl.edu.com.filedemo;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;

public class ReadSDCard extends Activity implements View.OnClickListener{

    private Button mReadSD,mWriteSD;
    private EditText mWriteSDText;
    private TextView mReadSDText;
    private final String FILE_NAME = "/lzl.xy";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_read_sdcard);

        mReadSD = (Button)findViewById(R.id.read_sd);
        mWriteSD = (Button)findViewById(R.id.write_sd);
        mReadSDText = (TextView)findViewById(R.id.readText_sd);
        mWriteSDText = (EditText)findViewById(R.id.writeText_sd);

        mReadSD.setOnClickListener(this);
        mWriteSD.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.write_sd:
                String content = mWriteSDText.getText().toString();
Log.i("contentioioioio",content);
                wirte(content);
                break;
            case R.id.read_sd:
               boolean flag =  read();
                if(flag){
                    Toast.makeText(ReadSDCard.this,"读取成功",Toast.LENGTH_LONG).show();
                }
                break;
        }
    }
    //定义读取数据的方法
    public boolean read(){
        boolean flag = false;
        //1.判断手机是否插入SD卡,若插有,则向里面进行制定文件的操作
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            //2.获取sd卡的路径
            File sdcardPath = Environment.getExternalStorageDirectory();
            //3.创建FileInputStream 读取指定文件
            FileInputStream fis = null;
            try {
                fis = new FileInputStream(sdcardPath.getCanonicalPath() + FILE_NAME);
                //将文件内容与缓冲区建立联系
                BufferedReader bufr = new BufferedReader(new InputStreamReader(fis));
                String line = null;
                StringBuffer sb = new StringBuffer();
                while((line = bufr.readLine())!=null){
                    sb.append(new String(line));
                    Log.i("content------------",sb.toString());
                }
                mReadSDText.setText(sb.toString());
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                try {
                    if(fis!=null)
                     fis.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
        return flag;
    }
    //定义写入数据的方法
    public void wirte(String content){
        //1.判断手机是否插入SD卡,若插有,则向里面进行制定文件的操作
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            //2.获取sd卡的路径
            File sdcardPath = Environment.getExternalStorageDirectory();
            //3.创建文件类
            File myFile = null;
            //使用Android特有的方法,对文件进行写操作
            RandomAccessFile raf = null;
            try {
                myFile=  new File(sdcardPath.getCanonicalPath() + FILE_NAME);
                raf = new RandomAccessFile(myFile, "rw");
                //4.将文件记录指针移向最后。
                raf.seek(myFile.length());
                raf.write(content.getBytes());
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    raf.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}




    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值