文件读写android,Android 文件读写详解

关于Android文件的读写有两种方式

一种是将txt文件当成资源文件放在res/raw或则res/asset文件夹下,raw的文件可以通过R.raw.fileName获得,asset下的文件可以通过AssetManager am = getAssets();am.open(“FileName”);来打开文件。但是如果把文件当成资源文件存放的话,只能读不能写。如果要想写入数据的话,就使用第二种方法

第二种方法从sd卡中读写文件,这样首先要向AndroidManifest.xml中加入两条权限消息

然后将文件操作封装在一个类中,在这里我把它命名为FileOption,先将代码粘贴如下:

package com.example.littleapplication;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.RandomAccessFile;

import java.util.Vector;

import android.os.Environment;

import android.util.Log;

public class FileOption {

private String fileName;

private File targetFile;

private File sdCardDir;

public FileOption(String fileName) throws IOException {

// TODO Auto-generated constructor stub

boolean mark = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);

if(mark)

{

this.fileName = fileName;

this.sdCardDir = Environment.getExternalStorageDirectory();

this.targetFile = new File(this.sdCardDir.getCanonicalPath()+this.fileName);

if(this.targetFile.exists()==false)

{

this.targetFile.createNewFile();

}

}

else{

Log.e("SDK", "无内存卡");

}

}

public Vector read() throws FileNotFoundException, IOException {

FileInputStream fis = new FileInputStream(this.sdCardDir.getCanonicalPath()+this.fileName);

BufferedReader br = new BufferedReader(new InputStreamReader(fis));

Vector res = new Vector();

String line = null;

while((line = br.readLine())!=null)

{

res.add(line);

}

br.close();

return res;

// TODO Auto-generated method stub

}

public boolean write(String add) throws IOException

{

RandomAccessFile raf = new RandomAccessFile(this.targetFile,"rw");

raf.seek(targetFile.length());

//换行

raf.write(add.getBytes());

raf.writeChar('\n');

raf.close();

return true;

}

/**返回一共有多少条记录

* @throws IOException

* @throws FileNotFoundException */

public int size() throws FileNotFoundException, IOException

{

FileInputStream fis = new FileInputStream(this.sdCardDir.getCanonicalPath()+this.fileName);

BufferedReader br = new BufferedReader(new InputStreamReader(fis));

String line = null;

int count = 0;

while((line = br.readLine())!=null)

{

count++;

}

//每三行代表一个数据项

//分别是 id title content data level

return count/5;

}

}