在android中的文件放在不同位置,它们的读取方式也有一些不同。
一、资源文件的读取:
1) 从resource的raw中读取文件数据:
05
InputStream in = getResources().openRawResource(R.raw.test);
08
int
length = in.available();
10
byte
[] buffer =
new
byte
[length];
16
res = EncodingUtils.getString(buffer,
"BIG5"
);
2) 从resource的asset中读取文件数据
01
String fileName =
"test.txt"
;
06
InputStream in = getResources().getAssets().open(fileName);
08
int
length = in.available();
09
byte
[] buffer =
new
byte
[length];
13
res = EncodingUtils.getString(buffer,
"UTF-8"
);
二、读写/data/data/<应用程序名>目录上的文件:
02
public
void
writeFile(String fileName,String writestr{
05
FileOutputStream fout =openFileOutput(fileName, MODE_PRIVATE);
07
byte
[] bytes = writestr.getBytes();
20
public
String readFile(String fileName){
23
FileInputStream fin = openFileInput(fileName);
24
int
length = fin.available();
25
byte
[] buffer =
new
byte
[length];
27
res = EncodingUtils.getString(buffer,
"UTF-8"
);
三、读写SD卡中的文件。也就是/mnt/sdcard/目录下面的文件 :
02
public
void
writeFileSdcardFile(String fileName,String write_str){
05
FileOutputStream fout =
new
FileOutputStream(fileName);
06
byte
[] bytes = write_str.getBytes();
19
public
String readFileSdcardFile(String fileName){
22
FileInputStream fin =
new
FileInputStream(fileName);
24
int
length = fin.available();
26
byte
[] buffer =
new
byte
[length];
29
res = EncodingUtils.getString(buffer,
"UTF-8"
);
四、使用File类进行文件的读写:
02
public
String readSDFile(String fileName) {
04
File file =
new
File(fileName);
06
FileInputStream fis =
new
FileInputStream(file);
08
int
length = fis.available();
10
byte
[] buffer =
new
byte
[length];
13
res = EncodingUtils.getString(buffer,
"UTF-8"
);
20
public
void
writeSDFile(String fileName, String write_str){
22
File file =
new
File(fileName);
24
FileOutputStream fos =
new
FileOutputStream(file);
26
byte
[] bytes = write_str.getBytes();
五、另外,File还有下面一些常用的操作:
01
String Name = File.getName();
02
String parentPath = File.getParent(); 获得文件或文件夹的父目录
03
String path = File.getAbsoultePath();
04
String path = File.getPath();
08
File[] files = File.listFiles();
六、使用RandomAccessFile进行文件的读写:
RandomAccessFile的使用方法比较灵活,功能也比较多,可以使用类似seek的方式可以跳转到文件的任意位置,从文件指示器当前位置开始读写。 它有两种构造方法 new RandomAccessFile(f,"rw");//读写方式 new RandomAccessFile(f,"r");//只读方式 使用事例:
08
public
class
RandomAccessFileDemo {
09
public
static
void
main(String[] args)
throws
Exception {
10
RandomAccessFile file =
new
RandomAccessFile(
"file"
,
"rw"
);
13
file.writeDouble(
8.236598
);
14
file.writeUTF(
"这是一个UTF字符串"
);
15
file.writeBoolean(
true
);
17
file.writeLong(2325451l);
18
file.writeUTF(
"又是一个UTF字符串"
);
19
file.writeFloat(
35
.5f);
25
System.out.println(
"——————从file文件指定位置读数据——————"
);
26
System.out.println(file.readInt());
27
System.out.println(file.readDouble());
28
System.out.println(file.readUTF());
31
System.out.println(file.readLong());
33
file.skipBytes(file.readShort());
34
System.out.println(file.readFloat());
37
System.out.println(
"——————文件复制(从file到fileCopy)——————"
);
39
RandomAccessFile fileCopy=
new
RandomAccessFile(
"fileCopy"
,
"rw"
);
40
int
len=(
int
)file.length();
41
byte
[] b=
new
byte
[len];
44
System.out.println(
"复制完成!"
);
总结:
1、apk中有两种资源文件,使用两种不同的方式进行打开使用。 raw使用InputStream in = getResources().openRawResource(R.raw.test); asset使用InputStream in = getResources().getAssets().open(fileName);
这些数据只能读取,不能写入。 2、SD卡中的文件使用FileInputStream和FileOutputStream进行文件的操作。 3、存放在数据区(/data/data/..)的文件只能使用openFileOutput和openFileInput进行操作。 注意不能使用FileInputStream和FileOutputStream进行文件的操作。 4、RandomAccess类仅限于文件的操作,不能访问其他IO设备。它可以跳转到文件的任意位置,从当前位置开始读写。
转自:http://blog.csdn.net/ztp800201/article/details/7322110