Android 文件读取.docx

上传人:b****5 文档编号:6346956 上传时间:2023-01-05 格式:DOCX 页数:12 大小:20.02KB
下载 相关 举报
Android 文件读取.docx_第1页
第1页 / 共12页
Android 文件读取.docx_第2页
第2页 / 共12页
Android 文件读取.docx_第3页
第3页 / 共12页
Android 文件读取.docx_第4页
第4页 / 共12页
Android 文件读取.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Android 文件读取.docx

《Android 文件读取.docx》由会员分享,可在线阅读,更多相关《Android 文件读取.docx(12页珍藏版)》请在冰豆网上搜索。

Android 文件读取.docx

Android文件读取

Android数据存储

12、访问资源文件

直接将文件保存在设备的内部存储.默认情况下,保存到内部存储的文件私有的,其他应用程序不能访问它们,当用户卸载应用程序时,所保存的文件也一并删除

1.1访问静态应用程序文件-只读

1.1.1从resource中的res/raw文件夹中获取文件

保存静态文件,通过openRawResource()传入资源ID(R.raw.ID),返回InputStream读取文件,该文件不能用于更新操作。

示例:

Stringres="";

try{

InputStreamin=getResources().openRawResource(R.raw.bbi);

//在\Test\res\raw\bbi.txt,

intlength=in.available();      

byte[]buffer=newbyte[length];       

in.read(buffer);        

//res=EncodingUtils.getString(buffer,"UTF-8");

//res=EncodingUtils.getString(buffer,"UNICODE");

res=EncodingUtils.getString(buffer,"BIG5");

//依bbi.txt的编码类型选择合适的编码,如果不调整会乱码

in.close();           

}catch(Exceptione){

   e.printStackTrace();        

}

myTextView.setText(res);//把得到的内容显示在TextView上

1.1.2从asset中获取文件并读取数据(资源文件只能读不能写)

asset目录下,称为原生文件,这类文件在被打包成apk文件时是不会进行压缩的,android使用AssetManager对asset文件进行访问,通过getResources().getAssets()获得AssetManager其内有一个open()方法可以根据用户提供的文件名,返回一个InputStream对象供用户使用。

eg:

StringfileName="yan.txt";//文件名字

Stringres="";

try{

InputStreamin=getResources().getAssets().open(fileName);

//\Test\assets\yan.txt这里有这样的文件存在

intlength=in.available();

byte[]buffer=newbyte[length];

in.read(buffer);

res=EncodingUtils.getString(buffer,"UTF-8");

}catch(Exceptione){

e.printStackTrace();

}

1.2访问设备存储相当于API工作目录

访问目录是

1.2.1调用context.openFileInput()返回FileInputStream读文件

1.2.2通过调用context.openFileOutput()返回FileOutputStream写文件

//写文件在./data/data/com.tt/files/下面

openFileOutput()参数

filename文件名

intmode操作模式MODE_PRIVATE默认,创建或替换该文件名的文件作为应用程序私有文件。

MODE_APPEND,MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE,

eg:

StringFILENAME="hello_file";

Stringstring="helloworld!

";

FileOutputStreamfos=openFileOutput(FILENAME,Context.MODE_PRIVATE);

fos.write(string.getBytes());

fos.close();

 

1.3保存缓存文件

如果您想缓存一些数据,而不是它长期存放,可以把文件保存为缓存文件;保存为缓存文件时,当设备内部存储空间不足,系统可能会删除这些缓存文件恢复空间;我们应该限制缓存空间的大小;当用户卸载应用程序时,这些文件将被删除。

使用方法:

getFilesDir()

获取的保存文件系统的目录的绝对路径;

getDir()

在存储空间中创建或打开一个目录

deleteFile()

删除存储文件

fileList()

返回应用程序保存文件列表

23、使用外部存储

2.11、检测外部存储状态:

Environment.getExternalStorageState()

booleanmExternalStorageAvailable=false;

booleanmExternalStorageWriteable=false;

Stringstate=Environment.getExternalStorageState();

if(Environment.MEDIA_MOUNTED.equals(state)){

  //Wecanreadandwritethemedia

  mExternalStorageAvailable=mExternalStorageWriteable=true;

}elseif(Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){

  //Wecanonlyreadthemedia

  mExternalStorageAvailable=true;

  mExternalStorageWriteable=false;

}else{

  //Somethingelseiswrong.Itmaybeoneofmanyotherstates,butallweneed

  //toknowiswecanneitherreadnorwrite

  mExternalStorageAvailable=mExternalStorageWriteable=false;

}

2.22、访问外部存储

API8以上,使用getExternalFilesDir()打开一个外部存储文件目录,这个方法需传递一个指定类型目录的参数,如:

DIRECTORY_MUSIC和DIRECTORY_RINGTONES,为空返回应用程序文件根目录;此方法可以根据指定的目录类型创建目录,该文件为应用程序私有,如果卸载应用程序,目录将会一起删除。

API7一下,使用getExternalStorageDirectory(),打开外部存储文件根目录,你的文件写入到如下目录中:

/Android/data//files/

eg:

voidcreateExternalStoragePrivateFile(){

  //Createapathwherewewillplaceourprivatefileonexternal

  //storage.

  Filefile=newFile(getExternalFilesDir(null),"DemoFile.jpg");

  try{

      //Verysimplecodetocopyapicturefromtheapplication's

      //resourceintotheexternalfile.Notethatthiscodedoes

      //noerrorchecking,andassumesthepictureissmall(doesnot

      //trytocopyitinchunks).Notethatifexternalstorageis

      //notcurrentlymountedthiswillsilentlyfail.

      InputStreamis=getResources().openRawResource(R.drawable.balloons);

      OutputStreamos=newFileOutputStream(file);

      byte[]data=newbyte[is.available()];

      is.read(data);

      os.write(data);

      is.close();

      os.close();

  }catch(IOExceptione){

      //Unabletocreatefile,likelybecauseexternalstorageis

      //notcurrentlymounted.

      Log.w("ExternalStorage","Errorwriting"+file,e);

  }

}

voiddeleteExternalStoragePrivateFile(){

  //Getpathforthefileonexternalstorage.Ifexternal

  //storageisnotcurrentlymountedthiswillfail.

  Filefile=newFile(getExternalFilesDir(null),"DemoFile.jpg");

  if(file!

=null){

      file.delete();

  }

}

booleanhasExternalStoragePrivateFile(){

  //Getpathforthefileonexternalstorage.Ifexternal

  //storageisnotcurrentlymountedthiswillfail.

  Filefile=newFile(getExternalFilesDir(null),"DemoFile.jpg");

  if(file!

=null){

      returnfile.exists();

  }

  returnfalse;

}

2.33、保存为共享文件

如果想将文件保存为不为应用程序私有,在应用程序卸载时不被删除,需要将文件保存到外部存储的公共目录上,这些目录在存储设备根目录下;如:

音乐,图片,铃声等。

API8以上,使用getExternalStoragePublicDirectory(),传入一个公共目录的类型参数,如DIRECTORY_MUSIC,DIRECTORY_PICTURES,DIRECTORY_RINGTONES等,目录不存在时这个方法会为你创建目录。

API7一下,使用getExternalStorageDirectory()打开存储文件根目录,保存文件到下面的目录中:

Music,Podcasts,Ringtones,Alarms,Notifications,Pictures,Movies,Download。

eg:

voidcreateExternalStoragePublicPicture(){

  //Createapathwherewewillplaceourpictureintheuser'spublicpicturesdirectory.

  Filepath=Environment.getExternalStoragePublicDirectory(

          Environment.DIRECTORY_PICTURES);

  Filefile=newFile(path,"DemoPicture.jpg");

  try{

      //MakesurethePicturesdirectoryexists.

      path.mkdirs();

      InputStreamis=getResources().openRawResource(R.drawable.balloons);

      OutputStreamos=newFileOutputStream(file);

      byte[]data=newbyte[is.available()];

      is.read(data);

      os.write(data);

      is.close();

      os.close();

  }catch(IOExceptione){

       Log.w("ExternalStorage","Errorwriting"+file,e);

  }

}

voiddeleteExternalStoragePublicPicture(){

  //Createapathwherewewillplaceourpictureintheuser's

  //publicpicturesdirectoryanddeletethefile.Ifexternal

  //storageisnotcurrentlymountedthiswillfail.

  Filepath=Environment.getExternalStoragePublicDirectory(

          Environment.DIRECTORY_PICTURES);

  Filefile=newFile(path,"DemoPicture.jpg");

  file.delete();

}

booleanhasExternalStoragePublicPicture(){

  //Createapathwherewewillplaceourpictureintheuser's

  //publicpicturesdirectoryandcheckifthefileexists.If

  //externalstorageisnotcurrentlymountedthiswillthinkthe

  //picturedoesn'texist.

  Filepath=Environment.getExternalStoragePublicDirectory(

          Environment.DIRECTORY_PICTURES);

  Filefile=newFile(path,"DemoPicture.jpg");

  returnfile.exists();

}

2.44、保存缓存文件

API8以上,使用getExternalCacheDir()打开存储目录保存文件,如卸载应用程序,缓存文件将自动删除,在应用程序运行期间你可以管理这些缓存文件,如不在使用可以删除以释放空间。

API7一下,使用getExternalStorageDirectory()打开缓存目录,缓存文件保存在下面的目录中:

/Android/data//cache/

你的java包名如"com.example.android.app".

2.55、读写文件

提示:

openFileOutput是在raw里编译过的访问设备存储,FileOutputStream是任何文件都可以

访问sdcard直接实例FileOutputStream对象,而访问存储设备文件通过openFileOutput返回FileOutputStream对象对数据操作。

2.5.1sdcard中去读文件

示例:

StringfileName="/sdcard/Y.txt";

//也可以用StringfileName="mnt/sdcard/Y.txt";

Stringres="";    

try{

FileInputStreamfin=newFileInputStream(fileName);

//FileInputStreamfin=openFileInput(fileName); 

//用这个就不行了,必须用FileInputStream

  intlength=fin.available();

  byte[]buffer=newbyte[length];

  fin.read(buffer);    

  res=EncodingUtils.getString(buffer,"UTF-8");

  fin.close();    

  }catch(Exceptione){

         e.printStackTrace();

}

myTextView.setText(res);

2.5.2SDCard中写文件

般写在\data\data\com.test\files\里面,打开DDMS查看fileexplorer是可以看到仿真器文件存放目录的结构的

 StringfileName="TEST.txt";

 Stringmessage="FFFFFFF11111FFFFF";

writeFileData(fileName,message);

 

 publicvoidwriteFileData(StringfileName,Stringmessage){

     try{

      FileOutputStreamfout=openFileOutput(fileName,MODE_PRIVATE);

      byte[]bytes=message.getBytes();

      fout.write(bytes);

       fout.close();

      }

     catch(Exceptione){

      e.printStackTrace();

     }

 }   

2.5.3写,读sdcard目录上的文件,要用FileOutputStream,不能用openFileOutput

//写在/mnt/sdcard/目录下面的文件

publicvoidwriteFileSdcard(StringfileName,Stringmessage){

try{

//FileOutputStreamfout=openFileOutput(fileName,MODE_PRIVATE);

FileOutputStreamfout=newFileOutputStream(fileName);

byte[]bytes=message.getBytes();

fout.write(bytes);

fout.close();

}

catch(Exceptione){

e.printStackTrace();

}

}

//读在/mnt/sdcard/目录下面的文件

publicStringreadFileSdcard(StringfileName){

Stringres="";

try{

FileInputStreamfin=newFileInputStream(fileName);

intlength=fin.available();

byte[]buffer=newbyte[length];

fin.read(buffer);

res=EncodingUtils.getString(buffer,"UTF-8");

fin.close();

}

catch(Exceptione){

e.printStackTrace();

}

returnres;

}

34、android读写文件正确实行方法

Android读写文件正确实行方法介绍

众所周知Android有一套自己的安全模型,具体可参见Android开发文档。

当应用程序(.apk)在安装时就会分配一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。

默认情况下,任何应用创建的文件,数据库,sharedpreferences都应该是私有的(位于/data/data/your_project/files/),其余程序无法访问。

除非在创建时指明是MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE,只要这样其余程序才能正确访问。

因为有这种Android读写文件的方法在安全上有所保障,进程打开文件时Android要求检查进程的userid。

所以不能直接用java的api来打开,因为java的io函数没有提这个机制。

无法用java的api直接打开程序私有的数据,默认路径为/data/data/your_project/files/

1.FileReaderfile=newFileReader("Android.txt");这里特别强调私有数据!

言外之意是如果某个文件或者数据不是程序私有的,既访问它时无须经过Android的权限检查,那么还是可以用java的ioapi来直接访问的。

所谓的非私有数据是只放在sdcard上的文件或者数据,

可以用java的ioapi来直接打开sdcard上文件。

1.FileReaderfile=newFileReader("/sdcard/Android.txt");如果要打开程序自己私有的文件和数据,那必须使用Activit

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1