在安卓手机中读写文件基本方法

时间:2023-02-01 22:43:55

做了很多年的Java B/S开发,主要应用场景都是一些企业级的应用或平台开发。大部分情况下对于数据的读写和存储都是在数据库或者服务器session中进行的。但是在安卓手机上,遇到本地文件的读写的情况还是挺多的,所以整理一下。


第一步:权限

AndroidManifest.xml配置文件中增加对文件读取的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

第二步:代码

首先要确认的是,安卓不同于iOS,文件的读写是分为两种情况的:

1、手机内部存储

2、外接SD卡

尽管现在大部分的国产安卓手机都向苹果看齐,不提供外接SD卡的功能。但是我觉得对于程序员来说,还是要分清楚这两种状况的。毕竟手机厂商不提供SD卡支持,不代表Android操作系统层面并不支持。


先来看内部存储。内部存储的文件读写只有应用程序有权限,除非你有ROOT权限。不过好像现在的很多国产手机都是出厂自带ROOT的

先用以下代码来获取内部文件存储的路径,这个路径的实际物理位置最终与应用程序的安装路径有关:

this.getApplicationContext().getFilesDir();

拿到路径后,其实就是基本的Java文件读写的写法了:

//写入内部存储文件
File file = new File(this.getContext().getFilesDir(),"Hello World.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(fileContent.getBytes());
fileOutputStream.flush();
fileOutputStream.close();


//从内部文件读取
File file = new File(this.getContext().getFilesDir(),"Hello World.txt");
FileInputStream fileInputStream = new FileInputStream(file);
int length = fileInputStream.available();   
byte [] buffer = new byte[length];   
fileInputStream.read(buffer);       
String fileContent = EncodingUtils.getString(buffer, "UTF-8");   
fileInputStream.close();

也许这就是Java程序员最大的好处了:一招鲜,吃遍天。毕竟Java的标准文件读写从上个世纪就存在并延续到今天了,几乎没有变化。


然后我们来看外部SD卡,首先需要使用Environment类来处理路径:

Environment.getExternalStorageDirectory();

得到路径后,其实后面的代码仍然是标准的Java文件读写,真的是“一招鲜”...

//写入SD卡存储文件
File file = new File(Environment.getExternalStorageDirectory(),"Hello World.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(fileContent.getBytes());
fileOutputStream.flush();
fileOutputStream.close();


//从SD卡读取文件
File file = new File(Environment.getExternalStorageDirectory(),"Hello World.txt");
FileInputStream fileInputStream = new FileInputStream(file);
int length = fileInputStream.available();   
byte [] buffer = new byte[length];   
fileInputStream.read(buffer);       
String fileContent = EncodingUtils.getString(buffer, "UTF-8");   
fileInputStream.close();