首页 > 代码库 > 【Android开发】 文件读写操作——总结

【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

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