`
dawuafang
  • 浏览: 1108375 次
文章分类
社区版块
存档分类
最新评论

android通用文件操作

 
阅读更多

最经用到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 sdcard
		File 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 +path
		File 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 cache
			os.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");
	}

}



分享到:
评论

相关推荐

    android SQL数据操作通用接口

    本人在公司编写的一个通用android的SQL 操作接口文件. 这个接口文件可以方便的操作数据库, 包括数据表的创建,插入, 删除,查询操作. 优点 : 该接口具有通用性,可以创建多种结构的表,实现插入删除也整个函数有封装,...

    Android通用脱壳机FUPK3

    Android代码是开源的,那么通过直接修改Android源码,把运行时的所有dex数据dump出来,不就可以实现一个通用的脱壳机了吗?FUPk3就是基于上面的思路来实现的。FUPK3需要修改Android源码,导出数据接口.不过,最为...

    qt调用JAVA文件示例

    本示例主要演示在QT开发android APP时,怎样通用调用JAVA文件,实现android原生操作

    新版Android开发教程.rar

    这一联盟将会支持 Google 发布的 Android 手机操作系统或者应用软件,共同开发名为 Android 的 开 放源代码的移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了...

    Android-logback-android.zip

    Android-logback-android.zip,android可靠、通用、快速、灵活的日志框架,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性优势。

    读写xls 和 xlsx格式的excel文件

    app 里面 可以读写xls 和xlsx格式的文件

    Android入门到精通源代码.

    11.3 Android模拟器支持的GPS定位文件 11.3.1 KML 11.3.2 NMEA 11.4 应用实例详解:确定当前 位置的GPS程序 11.4.1 实例分析 11.4.2 实例实现 11.5 基于Google Map的应用 11.5.1 使用MapView显示地图 11.5.2 使用...

    Android高级编程--源代码

    由于现有的手机应用程序的开发是构建在各手机厂家的私有操作系统之上的,所以它限制了第三方应用程序的开发,而Android为我们提供了一个开放和通用的选择。因为没有了人为制造的障碍,所以Android开发人员可以自由地...

    Android程序设计基础

     本书内容完整丰富,具有较强的通用性,读者都能通过本书快速学习 android开发,提高相关技能。... 作译者 作者: Ed Burnette Ed Burnette 资深软件技术专家,拥有20多年软件开发经验。他是SAS高级计算机实验室...

    CTS android

    adb(Android Debug Bridge)是Android 提供的一个通用的调试工具,借助这个工具,我们可以管理设备或手机 模拟器 的状态 .还可以进行以下的操作:  1、快速更新设备或手机模拟器中的代码,如应用或Android系统...

    Android应用程序开发教程PDF电子书完整版、Android开发学习教程

    Android是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • ...

    Android程序技术:个人学习助手项目习题详情显示.pptx

    为此,W3C组织推出了一种新的数据交换标准—XML,它是一种通用的数据交换格式, 易于保存树状结构的数据,可以使数据在各种应用程序之间轻松地实现数据的交换。 XML概述 XML概述 2.1 XML解析 2.2 实战演练——习题...

    Android代码-安卓聊天组件化SDK

    ChatPathUtil:图片录音等文件存储路径 ChatUtil:模型转换工具类 SmileUtils:处理表情(和iOS表情兼容) DateUtils:格式化日期 BaseChatRow:聊天对话页面每一个item的基类,定义了通用的UI和点击事件,如头像,...

    android-common:Android的通用库,包括ImageCache,HttpCache,DropDownListView,DownloadManager,Utils等

    微信: 主要包括:缓存(图片缓存,预取缓存,网络缓存),公共视图(拖动和底部加载更多ListView,底部加载更多ScrollView,滑动页面图库)以及Android常用工具类(网络,下载,Android资源操作,shell,文件,...

    Android程序技术:ContentProvider.pptx

    Uri(通用资源标识符 Universal Resource Identifer),代表数据操作的地址,每一个ContentProvider发布数据时都会有唯一的地址。 比如:content://(固定写法)+com.android.contacts(包名,可变)+/contacts(path...

    android开发实例大全_王东华

    实例064: 一个通用发短信程序 206 实例065: 收到短信后用E-mail邮件进行 通知 210 实例066: 实现触屏拨号功能 214 实例067: 一个短信群发程序 215 实例068: 来电后自动发送邮件通知 219 实例069: 监听手机拨接...

    FT311D Android APK

    FT311D接口芯片能为Android手机或平板电脑提供USB转外部UART、GPIO、PWM、I2C、SPI等硬件接口,无需安装USB驱动,全面兼容USB 2.0接口,不需要软件移植,不受Android操作系统升级的影响,只需安装对应的APK就能实现...

    Xamrin Android开发实战 源代码

    第3章 通用界面元素 81 3.1 显示图像 81 3.1.1 显示网络图像 81 3.1.2 显示本地图像 83 3.1.3 定制显示的图像 88 3.1.4 显示彩色的矩形块 93 3.2 显示、编辑文本 95 3.2.1 显示文本控件——标签控件 95 ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Android 一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导开发 IOS 由苹果公司开发的移动操作系统 Webkit 一个开源的浏览器引擎,在手机上的...

Global site tag (gtag.js) - Google Analytics