1、Files对象保存数据的分类
(1)、使用IO流进行存储,保存在/data/data/包名/files/目录下。
(2)、使用Environment类进行存储,保存在SD卡中。
2、IO流方式存取数据
使用IO流方式存取数据,即使用FileOutputStream类提供的openFileOutput()方法获取输出流,输出文件到磁盘;使用FileInputStream类提供的openFileInput()方法获取输入流,读取磁盘文件。
下面通过示例说明如何使用IO流方式存取数据:
①保存数据
public void writeFilesData() { String username = "hello"; String password = "world"; FileOutputStream fos = null; try { //获取文件输出流 fos = openFileOutput("user", MODE_PRIVATE); try { fos.write((username + "," + password).getBytes()); fos.flush(); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } }
②读取数据
private void readFilesData() { FileInputStream fis = null; byte[] buffer = null; try { //获取文件输入流 fis = openFileInput("user"); try { int size = fis.available(); buffer = new byte[size]; fis.read(buffer); //获取保存的数据 String data = new String(buffer, "UTF-8"); String[] split = data.split(","); String username = split[0]; String password = split[1]; } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } }
3、使用Environment类进行存储
每个Android设备都支持使用共享的外部存储来保存文件,这可以是SD卡等可以移除的存储介质,也可以是手机内存等不可以移除的存储介质。对SD卡的操作,需要使用
Environment类的getExternalStorageDirectory()方法,该方法用来获取外部存储器的目录。
访问外部存储器需要以下权限:
以下给出示例代码说明如何使用:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
①保存数据到SD卡
private void writeSDCard() { boolean mounted = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); if (mounted) { File root = Environment.getExternalStorageDirectory(); if (root.exists() && root.canWrite()) { File file = new File(root, "user.txt"); try { boolean newFile = file.createNewFile(); if (newFile) { Toast.makeText(mContext, "创建成功!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(mContext, "创建失败!", Toast.LENGTH_SHORT).show(); } } catch (IOException e) { e.printStackTrace(); } } else { Toast.makeText(mContext, "SD卡不存在或者不可写!", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(mContext, "SD卡不存在!", Toast.LENGTH_SHORT).show(); } }
②读取SD卡数据
微信公众号:Android及IOS开发private void readSDCard() { boolean mounted = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); if (mounted) { File root = Environment.getExternalStorageDirectory(); if (root.exists() && root.canRead()) { File file = new File(root, "root"); FileInputStream fis = null; try { //获取输入流 fis = new FileInputStream(file); byte[] buffer = null; try { int size = fis.available(); buffer = new byte[size]; fis.read(buffer); String data = new String(buffer, "UTF-8"); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); }finally { if (fis!=null){ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } else { Toast.makeText(mContext, "SD卡不存在或者不可读!", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(mContext, "SD卡不存在!", Toast.LENGTH_SHORT).show(); } }
(欢迎关注,第一时间推送博文信息)