数据存储之(四):文件存储
来源:互联网 发布:中国网络被黑客攻击 编辑:程序博客网 时间:2024/05/01 20:58
Android使用的是基于Linux的文件系统,程序开发人员可以建立和访问程序自身的私有文件,也可以访问保存在资源目录中的原始文件和XML文件,还可以在SD卡等外部存储设备中保存文件
二.外部存储-SD卡
5)获取SD卡的内存大小
剩余空间大小.主要依靠StatFs类。
主要参考:Android获取外部和内部存储空间总大小和可用大小
Android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,获取系统内部空间也就是/system的大小和剩余空间等等。
有时我们去浏览sd卡的时候,发现并没有文件夹存在,是因为我们少加了一句权限。<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"/>
2.如果不可用,则说明设备中的SD卡已经被移除,在Android模拟器则表明SD卡映像没有被正确加载
3.如果可用,则直接通过使用标准的Java.io.File类进行访问
1.向文件中读入内容:
try{ if (Environment.getExternalStorageState() .equals(Environment.MEDIA_MOUNTED)) { //获取SD卡的目录 File sdCardDir = Environment.getExternalStorageDirectory(); File targetFile = new File(sdCardDir.getCanonicalPath() + FILE_NAME); //以指定文件创建 RandomAccessFile对象 RandomAccessFile raf = new RandomAccessFile( targetFile , "rw"); //将文件记录指针移动到最后 raf.seek(targetFile.length()); // 输出文件内容 raf.write(string.getBytes()); raf.close(); Toast.makeText(MainActivity.this, "success", Toast.LENGTH_LONG).show(); } } catch(Exception e){ Toast.makeText(MainActivity.this, "ddd", Toast.LENGTH_LONG).show(); }
2.从文件中读取内容
try{ //如果手机插入了SD卡,而且应用程序具有访问SD的权限 if (Environment.getExternalStorageState() .equals(Environment.MEDIA_MOUNTED)) { //获取SD卡对应的存储目录 File sdCardDir = Environment.getExternalStorageDirectory(); //获取指定文件对应的输入流 FileInputStream fis = new FileInputStream(sdCardDir .getCanonicalPath() + FILE_NAME); //将指定输入流包装成BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(fis)); sb = new StringBuilder(""); String line = null; while((line = br.readLine()) != null) { sb.append(line); } Toast.makeText(MainActivity.this, sb.toString(), Toast.LENGTH_LONG).show(); return sb.toString(); } }catch(Exception e){ } return sb.toString();
3.SD卡文件浏览器
File currentParent; // 记录当前路径下的所有文件的文件数组 File[] currentFiles; private ListView listView ; private TextView textView ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取列出全部文件的ListView listView = (ListView) findViewById(R.id.list); textView = (TextView) findViewById(R.id.path); //获取系统的SD卡的目录 File root = new File("/mnt/sdcard/"); //如果 SD卡存在 if (root.exists()) { currentParent = root; currentFiles = root.listFiles(); //使用当前目录下的全部文件、文件夹来填充ListView inflateListView(currentFiles); } // 为ListView的列表项的单击事件绑定监听器 listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 用户单击了文件,直接返回,不做任何处理 if (currentFiles[position].isFile()) return; // 获取用户点击的文件夹下的所有文件 File[] tmp = currentFiles[position].listFiles(); if (tmp == null || tmp.length == 0) { Toast.makeText(MainActivity.this, "当前路径不可访问或该路径下没有文件", 20000).show(); } else { //获取用户单击的列表项对应的文件夹,设为当前的父文件夹 currentParent = currentFiles[position]; //保存当前的父文件夹内的全部文件和文件夹 currentFiles = tmp; // 再次更新ListView inflateListView(currentFiles); } } }); // 获取上一级目录的按钮 Button parent = (Button) findViewById(R.id.parent); parent.setOnClickListener(new OnClickListener() { @Override public void onClick(View source) { try { if (!currentParent.getCanonicalPath().equals("/mnt/sdcard")) { // 获取上一级目录 currentParent = currentParent.getParentFile(); // 列出当前目录下所有文件 currentFiles = currentParent.listFiles(); // 再次更新ListView inflateListView(currentFiles); } } catch (IOException e) { e.printStackTrace(); } } }); } private void inflateListView(File[] files) { // 创建一个List集合,List集合的元素是Map List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>(); for (int i = 0; i < files.length; i++) { Map<String, Object> listItem = new HashMap<String, Object>(); //如果当前File是文件夹,使用folder图标;否则使用file图标 if (files[i].isDirectory()) { listItem.put("icon", R.drawable.ic_launcher); } else { listItem.put("icon", R.drawable.ic_launcher); } listItem.put("fileName", files[i].getName()); //添加List项 listItems.add(listItem); } // 创建一个SimpleAdapter SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.line, new String[] { "icon", "fileName" }, new int[] { R.id.icon, R.id.file_name }); // 为ListView设置Adapter listView.setAdapter(simpleAdapter); try { textView.setText("当前路径为:" + currentParent.getCanonicalPath()); } catch (IOException e) { e.printStackTrace(); } } }
- 数据存储之(四):文件存储
- [数据存储之四]XML文件读取
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件
- Android数据存储之文件存储数据
- Android数据存储之文件存储
- Android数据存储之文件存储
- Android数据存储之文件存储
- Android数据存储之文件存储
- Android数据存储之文件存储
- android数据存储之文件存储
- Memcached .NET(一)安装
- Linux下QT图形界面开发 Qt介绍(5)
- Sed学习笔记
- HTML的16进制转义符 HTML Punctuation Special Characters
- Android中使用Gson解析JSON数据
- 数据存储之(四):文件存储
- Android加载器Loader使用
- linux工作队列
- Wlan与WiFi
- Qt国际化及使用时注意事项
- winCE上安装.NET framework
- iOS平台的应用程序调试与分析(openssh + gdb)
- GNU/Linux智能Makefile模板(多目录,多文件)
- <img src="中文文件名" /> 无法显示图片,图片名改成英文就可以显示;试了下在电脑桌面写了个HTML测试下,可以显示中文名称的图片,解决方法