ANDROID对文件的操作

  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应当与包名保持一致。

[java] view plaincopy

  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、简单的测试代码如下:

[java] view plaincopy

  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. }

a

时间: 2024-09-28 19:54:56

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

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

在android中的文件放在不同位置,它们的读取方式也有一些不同. 本文对android中对资源文件的读取.数据区文件的读取.SD卡文件的读取及RandomAccessFile的方式和方法进行了整理.供参考. 一.资源文件的读取: 1) 从resource的raw中读取文件数据: [java] view plaincopy String res = ""; try{ //得到资源中的Raw数据流 InputStream in = getResources().openRawResour

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

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

android 简单文件操作

1.布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orient

Android数据存储——文件读写操作(File)

Android文件读写操作 一.文件的基本操作 Android中可以在设备本身的存储设备或外接的存储设备中创建用于保存数据的文件.在默认状态下,文件是不能在不同程序间共享的. 当用户卸载您的应用程序时,这些文件删除. 文件存储数据可以通过openFileOutput方法打开一个文件(如果这个)文件不存在就自动创建这个文件),通过load方法来获取文件中的 数据,通过deleteFile方法删除一个指定的文件. 1,常用方法介绍: File是通过FileInputStream和FileOutput

Android中的文件权限操作

默认本工程创建的文件本工程对其有读写权限. 我们可以通过context.openFileOutput("文件名", 模式): 我们可以创建私有, 共有, 只读, 只写文件, 默认的文私有文件. 如果别的Android工程访问本工程的文件的话就会受限制, android的内核是linux, 所以他的文件管理和linux中的文件时一样的. 创建文件代码: /** * 创建各种文件 * @throws IOException * */ @SuppressLint({ "WorldW

(Android review)文件的读写(对File的操作)

Android中对操作的文件主要可以分为:File.XML.SharedPreference. 这篇博客主要介绍对File的操作: 1.MainActivity package com.example.filetest; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.view.Menu; import android.view.View; i

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

(一)获取总根 [java] view plain copy File[] fileList=File.listRoots(); //返回fileList.length为1 //fileList.getAbsolutePath()为"/" //这就是系统的总根 (二)打开总根目录 [java] view plain copy File file=new File("/"); File[] fileList=file.listFiles(); //获取的目录中除了&q

【Android开发】 文件读写操作——总结

在android中的文件放在不同位置,它们的读取方式也有一些不同. 本文对android中对资源文件的读取.数据区文件的读取.SD卡文件的读取及RandomAccessFile的方式和方法进行了整理.供参考. 一.资源文件的读取: 1) 从resource的raw中读取文件数据: 1 String res = ""; 2 try{ 3 4 //得到资源中的Raw数据流 5 InputStream in = getResources().openRawResource(R.raw.tes

Android的文件操作

Android的文件操作 一.Android的文件操作简介 要理解Android的文件存储,首先要明白Android是如何用什么方式获取和存入数据的.Android的文件操作都是通过流的方式进行的,即IO.Android的文件操作跟Java是一样的,文件操作分为输入流(InputStream)和输出流(OutputStream),输入流用于获取文件数据,输出流用于存储文件.输入流和输出流都是很耗费内存空间的,所以在使用Android的IO时,除非特殊需要,一般在使用结束后要记得关闭IO通道.接下