做了很多年的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();