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通用文件操作的更多相关文章
- android的文件操作
http://blog.csdn.net/fenghome/article/details/5668598 android的文件操作要有权限: <uses-permission android: ...
- Android FileUtils 文件操作类
系统路径 Context.getPackageName(); // 用于获取APP的所在包目录 Context.getPackageCodePath(); //来获得当前应用程序对应的apk文件的路径 ...
- Android 图片文件操作、屏幕相关、.9图片的理解
一:Android图片操作 1.存储bitmap到本地文件系统 public static void bitmapToFile(Bitmap bitmap, String uri) { if(!ex ...
- android中文件操作的四种枚举
1.MODE_PRIVATE:默认操作模式,代表该文件是私有数据,只能被应用自身访问,在该模式下,写入的的内容会覆盖原文件中的内容. 2.MODE_APPEND:该模式会检查文件是否存在,存在就往文件 ...
- Android写入文件操作权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses- ...
- android 简单文件操作
1.布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too ...
- Android数据存储-文件操作
一.预备知识 1.Android中的MVC设计模式 MVC (Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器.一个逻辑模型可以对于多种视图模型,比如一批统计 ...
- Java和Android文件操作
File这是文件基类,抽象地代表一个文件实体,它有四个不同的构造方法: File(File dir, String name) File(String path) File(String dir ...
- Android 文件操作心得体会
android 的文件操作说白了就是Java的文件操作的处理.所以如果对Java的io文件操作比较熟悉的话,android的文件操作就是小菜一碟了.好了,话不多说,开始今天的正题吧. 先从一个小项目入 ...
随机推荐
- CentOS 6使用iostat
iostat/mpstat/sar等命令属于sysstat程序包,所以使用yum安装sysstat即可. yum install sysstat
- 利用mysql中的SQL_CALC_FOUND_ROWS 来实现group by后的记录数统计
最近正在做一个显示消息的列表页,列表页中需要根据一个字段来分组显示.并且需要一个分页的效果. 大家也知道group by 后的数据是每一组一行记录,统计分组后的总的记录数又不能用count,所以SQL ...
- JOSN对象与JSON字符串的相互转化
前端在与服务端通信时.会与JSON JSON字符串经常打交道. 什么是JSON? 如果不太清楚可以点击这里 服务端传过来的数据一般都是一串字符串,jQuery AJAX中的success函数的第一个 ...
- 消息处理之EventBus ——使用篇
以前的几篇文章简单的介绍了一下UI线程和子线程之间的线程通信利器Handler,以及顺便介绍了一下SyncTask和HeadlerThread.这里介绍另一线程通信利器EventBus. EventB ...
- UI层调用WCF服务实例(源码)
WCF原理性的东西,暂时还没有深入研究,只是在公司的项目中使用到了,会调用,然后再多做了一些了解,现在将它抽出来了一个小实例,写了一个WCF的demo. 我写的这个WCF.Demo主要包括数据契约和服 ...
- Apache Shiro 快速入门教程,shiro 基础教程 (这篇文章非常好)
第一部分 什么是Apache Shiro 1.什么是 apache shiro : Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理 ...
- jQuery 遍历过滤
缩写搜索元素的范围 三个最基本的过滤方法是:first(), last() 和 eq(),它们允许您基于其在一组元素中的位置来选择一个特定的元素. 其他过滤方法,比如 filter() 和 not() ...
- Python:列表
#!/usr/bin/python3 #列表 是可变的,可修改的 listDemo = ["one","two","three"," ...
- libctemplate——C语言模块引擎简介及使用
前言 由先声明此libctemplate不是Google那个ctemplate.这个库是用C语言实现的,只有一个实现文件和一个头文件.Gooogl的ctemplate是C++实现的,和线程还扯上了关系 ...
- Angularjs中编写指令模版
angular.module('moduleName', []).directive( 'namespaceDirectiveName', [ function() { return { restri ...