【Android开发】 文件读写操作——总结

在android中的文件放在不同位置,它们的读取方式也有一些不同。

本文对android中对资源文件的读取、数据区文件的读取、SD卡文件的读取及RandomAccessFile的方式和方法进行了整理。供参考。

一、资源文件的读取:

1) 从resource的raw中读取文件数据:

 1 String res = "";
 2 try{
 3
 4     //得到资源中的Raw数据流
 5     InputStream in = getResources().openRawResource(R.raw.test);
 6
 7     //得到数据的大小
 8     int length = in.available();
 9
10     byte [] buffer = new byte[length];
11
12     //读取数据
13     in.read(buffer);
14
15     //依test.txt的编码类型选择合适的编码,如果不调整会乱码
16     res = EncodingUtils.getString(buffer, "BIG5");
17
18     //关闭
19     in.close();
20
21    }catch(Exception e){
22       e.printStackTrace();
23    }

  2) 从resource的asset中读取文件数据

 1 String fileName = "test.txt"; //文件名字
 2 String res="";
 3 try{
 4
 5    //得到资源中的asset数据流
 6    InputStream in = getResources().getAssets().open(fileName);
 7
 8    int length = in.available();
 9    byte [] buffer = new byte[length];
10
11    in.read(buffer);
12    in.close();
13    res = EncodingUtils.getString(buffer, "UTF-8");
14
15   }catch(Exception e){
16
17       e.printStackTrace();
18
19    }

二、读写/data/data/<应用程序名>目录上的文件:

 1 //写数据
 2 public void writeFile(String fileName,String writestr) throws IOException{
 3   try{
 4
 5         FileOutputStream fout =openFileOutput(fileName, MODE_PRIVATE);
 6
 7         byte [] bytes = writestr.getBytes();
 8
 9         fout.write(bytes);
10
11         fout.close();
12       }
13
14         catch(Exception e){
15         e.printStackTrace();
16        }
17 }
18
19 //读数据
20 public String readFile(String fileName) throws IOException{
21   String res="";
22   try{
23          FileInputStream fin = openFileInput(fileName);
24          int length = fin.available();
25          byte [] buffer = new byte[length];
26          fin.read(buffer);
27          res = EncodingUtils.getString(buffer, "UTF-8");
28          fin.close();
29      }
30      catch(Exception e){
31          e.printStackTrace();
32      }
33      return res;
34
35 }

三、读写SD卡中的文件。也就是/mnt/sdcard/目录下面的文件 :

 1 //写数据到SD中的文件
 2 public void writeFileSdcardFile(String fileName,String write_str) throws IOException{
 3  try{
 4
 5        FileOutputStream fout = new FileOutputStream(fileName);
 6        byte [] bytes = write_str.getBytes();
 7
 8        fout.write(bytes);
 9        fout.close();
10      }
11
12       catch(Exception e){
13         e.printStackTrace();
14        }
15    }
16
17
18 //读SD中的文件
19 public String readFileSdcardFile(String fileName) throws IOException{
20   String res="";
21   try{
22          FileInputStream fin = new FileInputStream(fileName);
23
24          int length = fin.available();
25
26          byte [] buffer = new byte[length];
27          fin.read(buffer);
28
29          res = EncodingUtils.getString(buffer, "UTF-8");
30
31          fin.close();
32         }
33
34         catch(Exception e){
35          e.printStackTrace();
36         }
37         return res;
38 } 

四、使用File类进行文件的读写:

 1 //读文件
 2 public String readSDFile(String fileName) throws IOException {
 3
 4         File file = new File(fileName);
 5
 6         FileInputStream fis = new FileInputStream(file);
 7
 8         int length = fis.available();
 9
10          byte [] buffer = new byte[length];
11          fis.read(buffer);
12
13          res = EncodingUtils.getString(buffer, "UTF-8");
14
15          fis.close();
16          return res;
17 }
18
19 //写文件
20 public void writeSDFile(String fileName, String write_str) throws IOException{
21
22         File file = new File(fileName);
23
24         FileOutputStream fos = new FileOutputStream(file);
25
26         byte [] bytes = write_str.getBytes();
27
28         fos.write(bytes);
29
30         fos.close();
31 } 

五、另外,File类还有下面一些常用的操作:

 1 String Name = File.getName();  //获得文件或文件夹的名称:
 2 String parentPath = File.getParent();  //获得文件或文件夹的父目录
 3 String path = File.getAbsoultePath();//绝对路经
 4 String path = File.getPath();//相对路经
 5 File.createNewFile();//建立文件
 6 File.mkDir(); //建立文件夹
 7 File.isDirectory(); //判断是文件或文件夹
 8 File[] files = File.listFiles();  //列出文件夹下的所有文件和文件夹名
 9 File.renameTo(dest);  //修改文件夹和文件名
10 File.delete();  //删除文件夹或文件  

六、使用RandomAccessFile进行文件的读写:

RandomAccessFile的使用方法比较灵活,功能也比较多,可以使用类似seek的方式可以跳转到文件的任意位置,从文件指示器当前位置开始读写。
它有两种构造方法
new RandomAccessFile(f,"rw");//读写方式
new RandomAccessFile(f,"r");//只读方式
使用事例:

 1 /*
 2  * 程序功能:演示了RandomAccessFile类的操作,同时实现了一个文件复制操作。
 3  */
 4
 5 import java.io.*;
 6
 7 public class RandomAccessFileDemo {
 8  public static void main(String[] args) throws Exception {
 9   RandomAccessFile file = new RandomAccessFile("file", "rw");
10   // 以下向file文件中写数据
11   file.writeInt(20);// 占4个字节
12   file.writeDouble(8.236598);// 占8个字节
13   file.writeUTF("这是一个UTF字符串");// 这个长度写在当前文件指针的前两个字节处,可用readShort()读取
14   file.writeBoolean(true);// 占1个字节
15   file.writeShort(395);// 占2个字节
16   file.writeLong(2325451l);// 占8个字节
17   file.writeUTF("又是一个UTF字符串");
18   file.writeFloat(35.5f);// 占4个字节
19   file.writeChar(‘a‘);// 占2个字节
20
21   file.seek(0);// 把文件指针位置设置到文件起始处
22
23   // 以下从file文件中读数据,要注意文件指针的位置
24   System.out.println("——————从file文件指定位置读数据——————");
25   System.out.println(file.readInt());
26   System.out.println(file.readDouble());
27   System.out.println(file.readUTF());
28
29   file.skipBytes(3);// 将文件指针跳过3个字节,本例中即跳过了一个boolean值和short值。
30   System.out.println(file.readLong());
31
32   file.skipBytes(file.readShort()); // 跳过文件中“又是一个UTF字符串”所占字节,注意readShort()方法会移动文件指针,所以不用加2。
33   System.out.println(file.readFloat());
34
35   //以下演示文件复制操作
36   System.out.println("——————文件复制(从file到fileCopy)——————");
37   file.seek(0);
38   RandomAccessFile fileCopy=new RandomAccessFile("fileCopy","rw");
39   int len=(int)file.length();//取得文件长度(字节数)
40   byte[] b=new byte[len];
41   file.readFully(b);
42   fileCopy.write(b);
43   System.out.println("复制完成!");
44  }
45 }

总结:

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

时间: 2024-08-03 07:02:11

【Android开发】 文件读写操作——总结的相关文章

loadrunder脚本篇——文件读写操作

 函数说明 函数原型: size_t fwrite( const void *buffer, size_t size, size_t count, FILE *file_pointer ); 参数说明: buffer:包含数据的缓冲区 size:缓冲区buffer的大小(字节为单位) count:缓冲区中写入多少个size大小数据(The number of bytes to store in the buffer) file_pointer:指向存放数据文件的文件指针 size_t: 际写入的

Android数据存储——文件读写操作(File)

Android文件读写操作 一.文件的基本操作 Android中可以在设备本身的存储设备或外接的存储设备中创建用于保存数据的文件.在默认状态下,文件是不能在不同程序间共享的. 当用户卸载您的应用程序时,这些文件删除. 文件存储数据可以通过openFileOutput方法打开一个文件(如果这个)文件不存在就自动创建这个文件),通过load方法来获取文件中的 数据,通过deleteFile方法删除一个指定的文件. 1,常用方法介绍: File是通过FileInputStream和FileOutput

java文件读写操作类

借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内容进行捕获,放在txt文本文档中 2,对各种类型数据都以字符串的形式逐行写入 3,对全局数组的内容进行写入 读操作: 获取文件行数 对逐行字符串型数据进行类型转换,放入二维数组中 为后面算法处理提供入口,但是要小心的是:不可以将行数用全局变量做计数器,否则每次读入是全局变量累加出错,应重新开始读取

php学习基础-文件系统(二) 文件读写操作、文件资源处理

一.文件的打开与关闭 /* *读取文件中的内容 * file_get_contents(); //php5以上 * file() * readfile(); * * 不足:全部读取, 不能读取部分,也不能指定的区域 * * fopen() * fread() * fgetc() * fgets() * * * * * 写入文件 * file_put_contents("URL", "内容字符串"); //php5以上 * 如果文件不存在,则创建,并写入内容 * 如果

android内存文件读写

android内存文件读写:无需权限 public class MainActivity extends Activity implements OnClickListener { private Button fileSave; private Button fileRead; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContent

Python常用的文件读写操作和字符串操作

文件读写操作 fileUtils.py # -*- coding: utf-8 -*- import os def getFileList(dir, fileList=[]):     """     遍历一个目录,输出所有文件名     param dir: 待遍历的文件夹     param filrList : 保存文件名的列表     return fileList: 文件名列表     """     newDir = dir     

python进阶--文件读写操作

Python读写文件 1. open 使用open打开文件后一定要记得调用 文件对象的close()方法.比如可以用try --finally语句来确保最后能关闭文件. >>>f1 = open('thisfile.txt') >>>try: f1.read() finally: f1.close() 2. 读文件(read,readline,readlines) ①读文本文件 input = open('data','r') input.read() ②读二进制文件

C文件读写操作

C语言的文件 一.文件基本操作:        在c语言中,对数据文件的操作都是依靠文件类型指针来完成. 1.文件类型指针的定义方式:FILE *文件类型变量 2.调用fopen函数打开文件的方法: 文件类型指针变量=fopen(文件名,使用文件打开方式): 文件打开方式(12种) 文件打开方式 意义 rt 只读打开一个文本文件,只允许读数据 wt 只写打开或建立一个文本文件,只允许写数据 at 追加打开一个文本文件,并在文件末尾写数据 rb 只读打开一个二进制文件,只允许读数据 wb 只写打开

C语言文件读写操作,从文件读取数据

很早写的在linux系统下的文件读写操作,从文件中读取数据 #include <stdio.h> int ReadInfoFromFile(const char *strFile) { FILE *fp; char ch; fp = fopen(strFile, "r"); // 只读的方式打开文件 if(fp==NULL) { perror("fopen"); // 打开文件失败 打印错误信息 return -1; } ch = fgetc(fp);

【python学习笔记】pthon3.x中的文件读写操作

在学习python文件读写的时候,因为教程是针对python2的,而使用的是python3.想要利用file类时,类库里找不到,重装了python2还是使不了.在别人园子认真拜读了<详解python2和python3区别>(已收藏)之后,才发现python3已经去掉file类. 现在利用python进行文件读写的方法更加类似于C语言的文件读写操作. 如今总结如下: 一 打开文件—— f = open('poem.txt','x+'): 读过open的帮助文档,然后自己翻译了一下,现给大家分享一