Android有一套自己的安全模型, 可参见Android开发文档。当应用程序安装时就会分配一个userid,当应用要去访问其他资源比如文件时,需要userid匹配。默认情况下 ,任何应用创建的文件,数据库, sharedpreferences都应该是私有的(位于/data/data/your_project/files/),其余程序无法访问。除非在创建时指明是MODE_WORLD_READABLE 或者 MODE_WORLD_WRITEABLE,只要这样其余程序才能正确访问。因为有这种Android读写文件的方法在安全上有所保障,进程打开文件时Android要求检查进程的user id。所以不能直接用java的api来打开,因为java的io函数没有提这个机制 。有一个问题系统必须已经root,并且文件浏览器取得root权限否则通过文件浏览器是看不到那些目录的。

一、私有文件夹下的文件存取(./data/data/com.包名/files/下面,相当于程序工作目录)

 无法用java的api直接打开程序私有的数据 ,默认路径为/data/data/your_project/files/,从sdcard中去读文件,首先要把文件通过\android-sdk-windows\tools\adb.exe把本地计算机上的文件copy到sdcard上去,adb.exe push e:/Android.txt/sdcard/, 不可以用adb.exe push e:\Android.txt \sdcard\,注意斜杠的,在linux下和winodws下是不一样的, 同样: 把仿真器上的文件copy到本地计算机上用: adb pull ./sdcard/Android.txt e:/ ,读取路径可以用“/sdcard/Android.txt”也可以用“mnt/sdcard/Android.txt” 如:FileReader file = new FileReader("Android.txt");    这里特别强调私有数据!言外之意是如果某个文件或者数据不是程序私有的,既访问它时无须经过Android的权限检查,那么还是可以用java的io api来直接访问的。所谓的非私有数据是只放在sdcard上的文件或者数据,   可以用java的io api来直接打开sdcard上文件。   如:FileReader file = new FileReader("/sdcard/Android.txt");     如果要打开程序自己私有的文件和数据,那必须使用Activity提供openFileOutput和openFileInput方法。创建程序私有的文件,由于权限方面的要求,必须使用activity提供的Android读写文件方法。    如:import java.io.FileInputStream;  import java.io.FileOutputStream;  import org.apache.http.util.EncodingUtils;  public void writeFileData(String fileName,String message){      try{       FileOutputStream fout = openFileOutput(fileName, MODE_PRIVATE);     //OutputStreamWriter outWriter = new OutputStreamWriter(fout);      byte [] bytes = message.getBytes();       fout.write(bytes);        fout.close();       }      catch(Exception e){       e.printStackTrace();      }  }     public String readFileData(String fileName){       String res="";       try{        //FileInputStream fin = openFileInput(fileName);      //InputStreamReader inReader = new InputStreamReader(fin);      //或者      FileInputStream fin = new FileInputStream(fileName);      int length = fin.available();        byte [] buffer = new byte[length];        fin.read(buffer);            res = EncodingUtils.getString(buffer, "UTF-8");        fin.close();           }       catch(Exception e){        e.printStackTrace();       }       return res;      }   

二、从resource中的raw文件夹中获取文件并读取数据(资源文件只能读不能写,在”\程序名\res\raw\FileName.txt”)
public String getFromRaw(String fileName){
String res = “”;
try{
InputStream in = getResources().openRawResource(R.raw.test1);
//资源在\Test\res\raw\test1.txt
int length = in.available();
byte [] buffer = new byte[length];
in.read(buffer);
//依bbi.txt的编码类型选择合适的编码,如果不调整会乱码
res = EncodingUtils.getString(buffer, “UTF-8”);
//res =EncodingUtils.getString(buffer, “BIG5”);
//res =EncodingUtils.getString(buffer, “UNICODE”);
in.close();
}
catch(Exception e){
e.printStackTrace();
}
return res ;
}

三、从asset中获取文件并读取数据(资源文件只能读不能写,在”\程序名\asserts\FileName.txt”)
public String getFromAsset(String fileName){
String res=”“;
try{
InputStream in = getResources().getAssets().open(fileName);
int length = in.available();
byte [] buffer = new byte[length];
in.read(buffer);
res = EncodingUtils.getString(buffer, “UTF-8”);
}
catch(Exception e){
e.printStackTrace();
}
return res;
}

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. python起点网月票榜字体反爬案例
  3. NPM 和webpack 的基础使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. Android的多媒体框架OpenCore介绍
  6. android drawable文件夹说明
  7. ionic和ionic2 环境下编写自定义cordova插件
  8. Android(安卓)Drawable Resource学习(一)、Drawable Resource简介
  9. Android的Log系统

随机推荐

  1. Android TextView 设置超链,设置部分字体
  2. Android Launcher2 allapps.rs
  3. 走进Android
  4. android 网络请求+json解析 最优分析
  5. Android之各种事件触发方案
  6. Android检测SD卡是否可用,Android获取磁盘
  7. android 3G pppd 调试记录
  8. Android EditText 的 android:imeOptions
  9. ProgressBar用法
  10. Android布局属性大全