1. import java.io.File;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import android.os.Environment;
  7. import android.os.StatFs;
  8. import android.util.Log;
  9. public class FileUtil {
  10. private static int bufferd = 1024;
  11. private FileUtil() {
  12. }
  13. /*
  14. * <!-- 在SDCard中创建与删除文件权限 --> <uses-permission
  15. * android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!--
  16. * 往SDCard写入数据权限 --> <uses-permission
  17. * android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  18. */
  19. // =================get SDCard information===================
  20. public static boolean isSdcardAvailable() {
  21. String status = Environment.getExternalStorageState();
  22. if (status.equals(Environment.MEDIA_MOUNTED)) {
  23. return true;
  24. }
  25. return false;
  26. }
  27. public static long getSDAllSizeKB() {
  28. // get path of sdcard
  29. File path = Environment.getExternalStorageDirectory();
  30. StatFs sf = new StatFs(path.getPath());
  31. // get single block size(Byte)
  32. long blockSize = sf.getBlockSize();
  33. // 获取所有数据块数
  34. long allBlocks = sf.getBlockCount();
  35. // 返回SD卡大小
  36. return (allBlocks * blockSize) / 1024; // KB
  37. }
  38. /**
  39. * free size for normal application
  40. *
  41. * @return
  42. */
  43. public static long getSDAvalibleSizeKB() {
  44. File path = Environment.getExternalStorageDirectory();
  45. StatFs sf = new StatFs(path.getPath());
  46. long blockSize = sf.getBlockSize();
  47. long avaliableSize = sf.getAvailableBlocks();
  48. return (avaliableSize * blockSize) / 1024;// KB
  49. }
  50. // =====================File Operation==========================
  51. public static boolean isFileExist(String director) {
  52. File file = new File(Environment.getExternalStorageDirectory()
  53. + File.separator + director);
  54. return file.exists();
  55. }
  56. /**
  57. * create multiple director
  58. *
  59. * @param path
  60. * @return
  61. */
  62. public static boolean createFile(String director) {
  63. if (isFileExist(director)) {
  64. return true;
  65. } else {
  66. File file = new File(Environment.getExternalStorageDirectory()
  67. + File.separator + director);
  68. if (!file.mkdirs()) {
  69. return false;
  70. }
  71. return true;
  72. }
  73. }
  74. public static File writeToSDCardFile(String directory, String fileName,
  75. String content, boolean isAppend) {
  76. return writeToSDCardFile(directory, fileName, content, "", isAppend);
  77. }
  78. /**
  79. *
  80. * @param director
  81. *            (you don't need to begin with
  82. *            Environment.getExternalStorageDirectory()+File.separator)
  83. * @param fileName
  84. * @param content
  85. * @param encoding
  86. *            (UTF-8...)
  87. * @param isAppend
  88. *            : Context.MODE_APPEND
  89. * @return
  90. */
  91. public static File writeToSDCardFile(String directory, String fileName,
  92. String content, String encoding, boolean isAppend) {
  93. // mobile SD card path +path
  94. File file = null;
  95. OutputStream os = null;
  96. try {
  97. if (!createFile(directory)) {
  98. return file;
  99. }
  100. file = new File(Environment.getExternalStorageDirectory()
  101. + File.separator + directory + File.separator + fileName);
  102. os = new FileOutputStream(file, isAppend);
  103. if (encoding.equals("")) {
  104. os.write(content.getBytes());
  105. } else {
  106. os.write(content.getBytes(encoding));
  107. }
  108. os.flush();
  109. } catch (IOException e) {
  110. Log.e("FileUtil", "writeToSDCardFile:" + e.getMessage());
  111. } finally {
  112. try {
  113. if(os != null){
  114. os.close();
  115. }
  116. } catch (IOException e) {
  117. e.printStackTrace();
  118. }
  119. }
  120. return file;
  121. }
  122. /**
  123. * write data from inputstream to SDCard
  124. */
  125. public File writeToSDCardFromInput(String directory, String fileName,
  126. InputStream input) {
  127. File file = null;
  128. OutputStream os = null;
  129. try {
  130. if (createFile(directory)) {
  131. return file;
  132. }
  133. file = new File(Environment.getExternalStorageDirectory()
  134. + File.separator + directory + fileName);
  135. os = new FileOutputStream(file);
  136. byte[] data = new byte[bufferd];
  137. int length = -1;
  138. while ((length = input.read(data)) != -1) {
  139. os.write(data, 0, length);
  140. }
  141. // clear cache
  142. os.flush();
  143. } catch (Exception e) {
  144. Log.e("FileUtil", "" + e.getMessage());
  145. e.printStackTrace();
  146. } finally {
  147. try {
  148. os.close();
  149. } catch (Exception e) {
  150. e.printStackTrace();
  151. }
  152. }
  153. return file;
  154. }
  155. /**
  156. * this url point to image(jpg)
  157. *
  158. * @param url
  159. * @return image name
  160. */
  161. public static String getUrlLastString(String url) {
  162. String[] str = url.split("/");
  163. int size = str.length;
  164. return str[size - 1];
  165. }
  166. }

下面对代码进行了测试,使用了AndroidJunitTest,当然另外还需要对SDCard查看操作的权限。

1、对android项目的mainfest.xml进行配置,需要注意targetPacket应当与包名保持一致。

  1. //在mainfest标签下
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  3. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
  4. <instrumentation
  5. android:name="android.test.InstrumentationTestRunner"
  6. android:targetPackage="com.example.mygeneralutil" >
  7. </instrumentation>
  8. //在mainfest的application标签下
  9. <uses-library android:name="android.test.runner"/>

2、简单的测试代码如下:

  1. import android.test.AndroidTestCase;
  2. import android.util.Log;
  3. public class FileUtilTest extends AndroidTestCase {
  4. public void testIsSdcardAvailable() {
  5. FileUtil.isSdcardAvailable();
  6. Log.e("FileUtil", ""+FileUtil.isSdcardAvailable());
  7. }
  8. public void testGetSDAllSizeKB() {
  9. FileUtil.getSDAllSizeKB();
  10. Log.e("FileUtil", ""+(float)FileUtil.getSDAllSizeKB()/1024/1024);
  11. }
  12. public void testGetSDAvalibleSizeKB() {
  13. FileUtil.getSDAvalibleSizeKB();
  14. Log.e("FileUtil", ""+(float)FileUtil.getSDAvalibleSizeKB()/1024/1024);
  15. }
  16. public void testIsFileExist() {
  17. FileUtil.isFileExist("example");
  18. Log.e("FileUtil", ""+FileUtil.isFileExist("example"));
  19. }
  20. public void testCreateFile() {
  21. Log.e("FileUtil", ""+FileUtil.createFile("forexample"));
  22. }
  23. public void testWriteToSDCardFileStringStringStringBoolean() {
  24. fail("Not yet implemented");
  25. }
  26. public void testWriteToSDCardFileStringStringStringStringBoolean() {
  27. FileUtil.writeToSDCardFile("forexample", "123.txt",
  28. "FileUtil.writeToSDCardFile", "utf-8", true);
  29. }
  30. public void testWriteToSDCardFromInput() {
  31. fail("Not yet implemented");
  32. }
  33. public void testGetUrlLastString() {
  34. fail("Not yet implemented");
  35. }
  36. }

ANDROID对文件的操作的更多相关文章

  1. ANDROID对文件的操作介绍

    1. Android遵循MVC设计思想: M(业务层):service V:视图(main.xml). C:Activity 2.使用文件如何对数据进行存储 Activity提供了openFileOu ...

  2. Android sdcard文件读写操作

    这次演示以,安卓原生操作系统 Nexus_6手机进行操作: AndroidManifest.xml配置相关权限: <!-- 增加权限 --> <uses-permission and ...

  3. [转]Android - 文件读写操作 总结

     转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...

  4. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  5. Android - 文件读写操作 总结

    在android中的文件放在不同位置,它们的读取方式也有一些不同. 本文对android中对资源文件的读取.数据区文件的读取.SD卡文件的读取及RandomAccessFile的方式和方法进行了整理. ...

  6. Android进阶(六)文件读操作

    Android中文件的读写操作与Java中文件的读写操作是有区别的.在Java中,读文件操作如以下代码所示: public class FileRead { private static final  ...

  7. Android入门之文件系统操作(一)简单的文件浏览器 (转)

    Android入门之文件系统操作(一)简单的文件浏览器 (转)        import java.io.File; import java.util.*; import android.app.A ...

  8. Android入门之文件系统操作(二)文件操作相关指令

    (一)获取总根 File[] fileList=File.listRoots(); //返回fileList.length为1 //fileList.getAbsolutePath()为"/ ...

  9. android的文件操作

    http://blog.csdn.net/fenghome/article/details/5668598 android的文件操作要有权限: <uses-permission android: ...

随机推荐

  1. 游戏中网络数据包和HTTP数据的思考

    快下班了,对于这个沙盒类文字游戏,其实考虑的东西还是很多的,服务器的架构,NPC, NPC API的运算,等等等 现在在思考大数据传输,比如背包数据或者拍卖行的商品展示数据在传输的时候的性能问题 目前 ...

  2. SQL文件导入到mysql乱码

    在输入中文之前先SET NAMES GBK 彻底解决MYSQL中文乱码的办法((5.5以后版本:) 修改MYSQL配置文件my.ini [client] default-character-set=u ...

  3. 菜鸟运维笔记:安装MySQL,PHP及phpMyAdmin

    转载请注明出处:http://blog.csdn.net/guodongxiaren/article/details/40684799 阿里云提示我备案,挺烦人的.前天通过github的学生开发包. ...

  4. 揭密: M2和高房价到底谁推高了谁?

    近期,著名经济学家吴敬链向新华网等媒体表示:房价高的根本原本就是货币超发.近期十年来我国M2增长率(广义货币增长率)太快."钱太多了,有些人要保值就要投资买房,又因货币非常多购买力非常强.就 ...

  5. 字符串分割--Java中String.split()用法

    转载自:http://blog.163.com/zs_note/blog/static/199386112201110804233558/ 在java.lang包中有String.split()方法, ...

  6. NOPI导出Excel 自定义列名

    NOPI 做Excel 导出确实很方便 ,但是一直在用没好好研究. 在网上没找到自定义Columns的方法 ,于是乎自己就在原来的方法上简单地改改. 想用的童鞋们可以直接拿去用! /// 数据大于65 ...

  7. 彻底解决 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    最近我的VS2010不知道怎么回事,平时用的好好的,近期竟然出现了所谓的 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 头痛万分,查了各种资料一 ...

  8. Apache 编译扩展的方法

    下载源码包 进入源码包的modules目录 选择你要编译的.c文件 eg: /home/work/local/apache/bin/apxs -c -i -a mod_proxy_http.c 选项说 ...

  9. 常用的Linux操作命令(一)

    ls 目录 mkdir 创建文件夹 vi 新建文件 :w filename 将文章存入指定的文件名filename :wq 保存并退出编辑文件 :q! 强制离开并放弃编辑的文件 cd 切换到目录/ro ...

  10. Android 实现GIF播放(解码)

    实现原理很简单,先把GIF动画解码成多张Bitmap图片,然后放到AnimationDrawable里面去逐一播放即可. GifHelper代码: package com.android.view; ...