最经用到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() {}/* * <!-- 在SDCard中创建与删除文件权限 --> <uses-permission * android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- * 往SDCard写入数据权限 --> <uses-permission * android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> */// =================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标签下<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><instrumentation        android:name="android.test.InstrumentationTestRunner"        android:targetPackage="com.example.mygeneralutil" ></instrumentation> //在mainfest的application标签下<uses-library android:name="android.test.runner"/>


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(安卓)7.0 后拍照和相册选择
  2. Android(安卓)源代码编译前后的目录结构
  3. Windows下用Git下载android源码
  4. Android(安卓)通过代码实现控制数据网络的开关(仅适用于5.0以上)
  5. android ndk 调用第三方so
  6. Android如何通过https协议下载自己的https网站上的文件/apk等
  7. Android(安卓)Studio主要目录及文件简介
  8. Android(安卓)Launcher 如何去掉主菜单,所有应用摆在桌面,类似小米
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android(安卓)- Intent - 传递数据
  2. Android(安卓)获取设备信息
  3. Android(安卓)2.1 源码结构分析
  4. 虚拟键盘弹出时挡住EditText的解决方案
  5. Android剪切图片
  6. Android之使用ContentResolver对通信录中
  7. Android代码速查,写给新手的朋友们
  8. Android(安卓)Framework 动态修改机器型
  9. 丰富多彩的Android(安卓)onTouch事件
  10. android 更换皮肤项目