概述:
之前我写过一篇博客,叫《Android中SharedPreferences与Editor的使用》。说的是在Android程序中保存数据(多是一些配置参数的数据)的应用。Android中的5种数据存储方式在之前的那篇文章中也有简单介绍。今天,我就来说说Android文件操作中的openFileOutPut和openFileInput。
我想大家或多或少都有学习过一段时间的Java吧,学习Android,Java是基础。今天要写的这个文件操作与Java中文件操作基本上是差不多的。都是要先去创建一个输入流/输出流,然后,我们就是通过从指定文件中按字节来读取文件中的内容到我们的输入流中,再把读进来的数据追加到一个字符串缓存中(这里用的是StringBuilder),当然你要是觉得不喜欢new来new去,也可以直接使用String类型的字符串。
供读文件关键代码:
/** * 读数据 */ private void readerDataFromSD() { if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { // 获取SDcard路径 StringBuilder sb = new StringBuilder(); try { File sdCardDir = Environment.getExternalStorageDirectory(); File file = new File(sdCardDir, FILE_NAME); InputStream inputStream = new FileInputStream(file); int len = 0; byte[] buffer = new byte[1024]; while ((len = inputStream.read(buffer)) != -1) { sb.append(new String(buffer, 0, len)); } mShowResultTextView.setText(sb.toString()); inputStream.close(); } catch (Exception e) { e.printStackTrace(); } } }
写文件的时候,我们要先创建一个输出流,再将FileOutputStream包装成PrintStream,最后输出。当然,大家也可以不用包装流,直接使用节点流写数据也可以,就像上面读数据一样。
写文件关键代码:
/** * 写数据 */ private void writeData2SD() { System.out.println("往SDCard里写数据"); // 先判断是否有SDCard if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { String content = mContentEditText.getText().toString(); try { // 获取SDcard路径 File sdCardDir = Environment.getExternalStorageDirectory(); File file = new File(sdCardDir, FILE_NAME); // File file = new File(sdcardPath + File.separator + FILE_NAME); // 以指定文件创建RandomAccessFile对象 RandomAccessFile raf = new RandomAccessFile(file, "rw"); // 将文件记录指针移动最后 raf.seek(file.length()); // 输出文件内容 raf.write(content.getBytes()); raf.close(); } catch (Exception e) { e.printStackTrace(); } } }大家可以看到上有一句
raf.seek(file.length());它是将文件记录指针移动到最后的位置。所以这种方式就是以追加的方式来写文件了。如果你不想以这种方式来写文件,那就要把这句话除掉。
权限说明:
另外,别忘了添加读写文件的权限:
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
参考资料:
《疯狂Android讲义》