最经用到android的SCCard的文件操作,因此稍作了整理,将它写成一个简单的工具类。其中,可以判断SDCard的是否可用,可用存储空间,文件的创建以及写入数据。经过测试,可以正常使用。代码如下:

import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import android.os.Environment;import android.os.StatFs;import android.util.Log;public class FileUtil {private static int bufferd = 1024;private FileUtil() {}/* *     */// =================get SDCard information===================public static boolean isSdcardAvailable() {String status = Environment.getExternalStorageState();if (status.equals(Environment.MEDIA_MOUNTED)) {return true;}return false;}public static long getSDAllSizeKB() {// get path of sdcardFile path = Environment.getExternalStorageDirectory();StatFs sf = new StatFs(path.getPath());// get single block size(Byte)long blockSize = sf.getBlockSize();// 获取所有数据块数long allBlocks = sf.getBlockCount();// 返回SD卡大小return (allBlocks * blockSize) / 1024; // KB}/** * free size for normal application *  * @return */public static long getSDAvalibleSizeKB() {File path = Environment.getExternalStorageDirectory();StatFs sf = new StatFs(path.getPath());long blockSize = sf.getBlockSize();long avaliableSize = sf.getAvailableBlocks();return (avaliableSize * blockSize) / 1024;// KB}// =====================File Operation==========================public static boolean isFileExist(String director) {File file = new File(Environment.getExternalStorageDirectory()+ File.separator + director);return file.exists();}/** * create multiple director *  * @param path * @return */public static boolean createFile(String director) {if (isFileExist(director)) {return true;} else {File file = new File(Environment.getExternalStorageDirectory()+ File.separator + director);if (!file.mkdirs()) {return false;}return true;}}public static File writeToSDCardFile(String directory, String fileName,String content, boolean isAppend) {return writeToSDCardFile(directory, fileName, content, "", isAppend);}/** *  * @param director *            (you don't need to begin with *            Environment.getExternalStorageDirectory()+File.separator) * @param fileName * @param content * @param encoding *            (UTF-8...) * @param isAppend *            : Context.MODE_APPEND * @return */public static File writeToSDCardFile(String directory, String fileName,String content, String encoding, boolean isAppend) {// mobile SD card path +pathFile file = null;OutputStream os = null;try {if (!createFile(directory)) {return file;}file = new File(Environment.getExternalStorageDirectory()+ File.separator + directory + File.separator + fileName);os = new FileOutputStream(file, isAppend);if (encoding.equals("")) {os.write(content.getBytes());} else {os.write(content.getBytes(encoding));}os.flush();} catch (IOException e) {Log.e("FileUtil", "writeToSDCardFile:" + e.getMessage());} finally {try {if(os != null){os.close();}} catch (IOException e) {e.printStackTrace();}}return file;}/** * write data from inputstream to SDCard */public File writeToSDCardFromInput(String directory, String fileName,InputStream input) {File file = null;OutputStream os = null;try {if (createFile(directory)) {return file;}file = new File(Environment.getExternalStorageDirectory()+ File.separator + directory + fileName);os = new FileOutputStream(file);byte[] data = new byte[bufferd];int length = -1;while ((length = input.read(data)) != -1) {os.write(data, 0, length);}// clear cacheos.flush();} catch (Exception e) {Log.e("FileUtil", "" + e.getMessage());e.printStackTrace();} finally {try {os.close();} catch (Exception e) {e.printStackTrace();}}return file;}/** * this url point to image(jpg) *  * @param url * @return image name */public static String getUrlLastString(String url) {String[] str = url.split("/");int size = str.length;return str[size - 1];}}

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

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


//在mainfest标签下 //在mainfest的application标签下


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

import android.test.AndroidTestCase;import android.util.Log;public class FileUtilTest extends AndroidTestCase {public void testIsSdcardAvailable() {FileUtil.isSdcardAvailable();Log.e("FileUtil", ""+FileUtil.isSdcardAvailable());}public void testGetSDAllSizeKB() {FileUtil.getSDAllSizeKB();Log.e("FileUtil", ""+(float)FileUtil.getSDAllSizeKB()/1024/1024);}public void testGetSDAvalibleSizeKB() {FileUtil.getSDAvalibleSizeKB();Log.e("FileUtil", ""+(float)FileUtil.getSDAvalibleSizeKB()/1024/1024);}public void testIsFileExist() {FileUtil.isFileExist("example");Log.e("FileUtil", ""+FileUtil.isFileExist("example"));}public void testCreateFile() {Log.e("FileUtil", ""+FileUtil.createFile("forexample"));}public void testWriteToSDCardFileStringStringStringBoolean() {fail("Not yet implemented");}public void testWriteToSDCardFileStringStringStringStringBoolean() {FileUtil.writeToSDCardFile("forexample", "123.txt", "FileUtil.writeToSDCardFile", "utf-8", true);}public void testWriteToSDCardFromInput() {fail("Not yet implemented");}public void testGetUrlLastString() {fail("Not yet implemented");}}



更多相关文章

  1. android 选择本地图片并截剪图片保存到,sdcard指定目录中
  2. Android(安卓)本地代码中的LIKELY和UNLIKELY宏
  3. Android下pm 命令详解
  4. Android利用setLayoutParams在代码中调整布局(Margin和居中)
  5. Android(安卓)studio配置Opencv开发环境
  6. 我的Android进阶之旅------>Android百度地图定位SDK功能学习
  7. android背景选择器selector用法汇总
  8. csr8811蓝牙芯片porting总结
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android实用技巧之adb命令:getprop,setprop
  2. Android_UI主线程与子线程
  3. Android(安卓)中 Base64 转换成 图片
  4. Android(安卓)沉浸式状态栏 最通俗易懂的
  5. Android(安卓)自定义View(四) 时钟clockVie
  6. Android(安卓)快速开发之 Live Templates
  7. 错误:Repository test has failed (Androi
  8. Android源码阅读方式——教你如何找到Act
  9. Unity与Android的问题
  10. android简繁体相互转换