众所周知Android有一套自己的安全模型,具体可参见Android开发文档。当应用程序(.apk)在安装时就会分配一个userid,
当该应用要去访问其他资源比如文件的时候,就需要userid匹配。
默认情况下,任何应用程序创建的文件,数据库,sharedpreferences都应该是私有的(位于/data/data/your_project/files/),
程序私有的数据的默认路径为/data/data/your_project/files/;
其余程序无法访问。除非在创建时指明是MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE,只有这样其余程序才能正确访问。
因为Android有这种为读写文件而提供的安全保障体系(进程打开程序私人文件时,Android要求检查进程的userid);
所以我们不能直接用java的api来打开程序的私有文件。
比如:
1.FileReaderfile=newFileReader("Android.txt");
上面的代码将不能成功执行。
这里特别强调私有数据!言外之意是如果某个文件或者数据不是程序私有的,既访问它时无须经过Android的权限检查,那么还是可以用java的ioapi来直接访问的。所谓的非私有数据是只放在sdcard上的文件或者数据,
可以用java的ioapi来直接打开sdcard上文件。
1.FileReaderfile=newFileReader("/sdcard/Android.txt");
如果要打开程序自己私有的文件和数据,那必须使用Activity提供openFileOutput和openFileInput方法。
创建程序私有的文件,由于权限方面的要求,必须使用activity提供的文件操作方法
1.FileOutputStreamos=this.openFileOutput("Android.txt",MODE_PRIVATE);
2.OutputStreamWriteroutWriter=newOutputStreamWriter(os);
读取程序私有的文件,由于权限方面的要求,必须使用activity提供的文件操作方法
1.FileInputStreamos=this.openFileInput("Android.txt");
2.InputStreamReaderinReader=newInputStreamReader(os);
提速文件读写
其原理就是读的时候,先把文件的一些数据读到缓冲中。
这样的好处是如果读的内容已经在缓冲中,就读缓冲的数据。
如果没有,就让缓冲先从文件读取数据,然后再从缓冲读数据。
写操作与操作同理.
这样的好处是减少对文件的操作次数,从而达到提高性能的目的。
坏处是要额外的内存来做缓冲区.
对于FileInputStream和FileOutputStream用下面的方式。
BufferedInputStreambuf=newBufferedInputStream(newFileInputStream("file.java"));
BufferedOutputStreambuf=newBufferedOutputStream(newFileOutputStream("file.java"));
对于FileReader和FileReader用下面的方式
BufferedReaderbuf=newBufferedReader(newFileReader("file.java"));
BufferedWriterbuf=newBufferedWriter(newFileWriter("file.java"));
对于写操作最后最好加上flush().
实例1:
voidwrite2File()
{
Stringcontent="hello:"+System.currentTimeMillis();
FileOutputStreamos=null;
StringfileName="hubin.txt";
intmode=Context.MODE_WORLD_WRITEABLE|Context.MODE_WORLD_READABLE;
try{
os=openFileOutput(fileName,mode);
os.write(content.getBytes());
/*OutputStreamWriteroutWriter=newOutputStreamWriter(os);
outWriter.write(content);*/
Log.i(tag,"write:"+content);
}catch(FileNotFoundExceptione)
{
Log.e(tag,"createFile:",e);
}
catch(IOExceptione)
{
Log.e(tag,"writefile",e);
}
finally
{
if(os!=null)
{
try{
os.flush();
os.close();
}catch(IOExceptione)
{
Log.e(tag,"closefile",e);
}
}
}
}
voidreadFromFile()
{
Stringcontent;
FileInputStreamis=null;
StringfileName="hubin.txt";
try{
is=openFileInput(fileName);
bytebuffer[]=newbyte[is.available()];
is.read(buffer);
content=newString(buffer);
Log.i(tag,"read:"+content);
//InputStreamReaderinReader=newInputStreamReader(is);
}catch(FileNotFoundExceptione)
{
Log.e(tag,"createFile:",e);
}
catch(IOExceptione)
{
Log.e(tag,"writefile",e);
}
finally
{
if(is!=null)
{
try{
is.close();
}catch(IOExceptione)
{
Log.e(tag,"closefile",e);
}
}
}
}
分享到:
相关推荐
Android - 文件读写操作 方法总结
Android 读写文件实例,包括 SD 卡读写和 内部存储读写。 文件目录获取等。
Android读写配置文件的实例,工程中即包括了读取配置文件,也包括了写入配置文件。非常完整,代码简单清晰
在android开发中,我们经常用到文件的读写权限
Android 基于libaums实现读写U盘文件,相关博客:https://blog.csdn.net/a512337862/article/details/80505128
Android studio 获取内置存储器路径,创建文件夹,读写、删除文件,亲试好用
android中读写文件的代码,用于在手机中读写,保存数据到文件中。
Android JNI Android JNI 用C函数写本地库读写文件,底层调用小例子用C函数写本地库读写文件,底层调用小例子
Android应用源码SdCard读写文件实例
android 应用\文件读写android 应用\文件读写android 应用\文件读写android 应用\文件读写android 应用\文件读写android 应用\文件读写android 应用\文件读写android 应用\文件读写
Android 读写SD中存储的文件!
实时检测USB的插入,检测并读取文件,也可根据路径进行文件读写操作
android 通过Environment环境 获取手机根目录 读写 文件操作。
android---在内部存储中读写文件
Android SD卡文件读写操作可以学习下
Android jni文件读写 NDK文件读取 读写 操作 NDK数据加密DEMO 源码直接上传,运行在android6.0系统测试通过
Android 13 之后,手机读写权限变更,针对小米14,txt 文件读写测试案例
如何读写Android文件 如何读写Android文件
主要介绍了Android应用程序中读写txt文本文件的基本方法讲解,基本上依靠context.openFileInput()和context.openFileOutput()两个方法为主,需要的朋友可以参考下
Android项目使用的GDAL2.2.3依赖包,和Android调用GDAL读写shp文件的示例代码。引入方式十分简单,不会引用依赖的可以直接使用示例项目。