里面注释很清楚了。。。

package cgjr.com.cgjr.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.util.Log; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.CharArrayWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.StringReader;
import java.io.Writer; /**
* 文件管理类 在以后的开发中也可以使用这个工具类,提高代码的利用性
* 只要是对SD卡的操作
* 1、获取SD卡路径 getSDPATH
* 2、在SD卡上根据传入的目录名创建目录 createSDDir
* 3、在创建上目录后可以在该目录上创建文件 createSDFile
* 4、检测文件是否存在 isFileExist
* 5、将一个InputStream写入到SD卡中 write2SDFromInput
* 6、将一个字符流写入到SD卡 write2SDFromWrite
* 注:如果要写入SD卡,只要调用write2SDFromInput函数即可
*
* @author Administrator
*/
public class FileUtils {
private static String SDPATH;
private static final String TAG = "FileUtils"; public FileUtils() {
//得到当前设备外部存储设备的目录
SDPATH = Environment.getExternalStorageDirectory() + File.separator;
} /**
* 获取当前SD卡的根目录
*
* @return
*/
public String getSDPATH() {
return SDPATH;
} /**
* SD卡上创建目录
*/
public File createSDDir(String dirName) {
File dir = new File(SDPATH + dirName);
Log.i(TAG, "createSDDir " + SDPATH + dirName);
if (!dir.exists()) {
dir.mkdirs();
}
return dir;
} /**
* SD卡上创建文件
*/
public File createSDFile(String fileName) throws IOException {
File file = new File(SDPATH + fileName);
Log.i(TAG, "createSDFile " + SDPATH + fileName);
file.createNewFile();
return file;
} /**
* 判断SD卡上的文件是否存在
*/
public boolean isFileExist(String fileName) {
File file = new File(SDPATH + fileName);
return file.exists();
} /**
* 将一个InputStream字节流写入到SD卡中
*/
public File write2SDFromInput(String Path, String FileName, InputStream input) {
File file = null;
OutputStream output = null; //创建一个写入字节流对象
try {
createSDDir(Path); //根据传入的路径创建目录
file = createSDFile(Path + FileName); //根据传入的文件名创建
output = new FileOutputStream(file);
byte buffer[] = new byte[4 * 1024]; //每次读取4K
int num = 0; //需要根据读取的字节大小写入文件
while ((num = (input.read(buffer))) != -1) {
output.write(buffer, 0, num);
}
output.flush(); //清空缓存
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (output != null)
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return file;
} /**
* 把传入的字符流写入到SD卡中
*
* @param Path
* @param FileName
* @param input
* @return
*/
public File write2SDFromWrite(String Path, String FileName, BufferedReader input) {
File file = null;
FileWriter output = null; //创建一个写入字符流对象
BufferedWriter bufw = null;
try {
createSDDir(Path); //根据传入的路径创建目录
file = createSDFile(Path + FileName); //根据传入的文件名创建
output = new FileWriter(file);
bufw = new BufferedWriter(output);
String line = null;
while ((line = (input.readLine())) != null) {
bufw.write(line);
bufw.newLine();
}
bufw.flush(); //清空缓存
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (bufw != null)
bufw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return file;
} /**
* 从文本文件对象中读取内容并转换为字符数组
*
* @param file File 对象
* @return 读到的字符数据
*/
public static char[] readChars(File file) {
CharArrayWriter caw = new CharArrayWriter();
try {
Reader fr = new FileReader(file);
Reader in = new BufferedReader(fr);
int count = 0;
char[] buf = new char[16384];
while ((count = in.read(buf)) != -1) {
if (count > 0) caw.write(buf, 0, count);
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
return caw.toCharArray();
} /**
* 从字符串对象中读取内容并转换为字符数组
*
* @param string 在读的String数据
* @return 字符数组
*/
public static char[] readChars(String string) {
CharArrayWriter caw = new CharArrayWriter();
try {
Reader sr = new StringReader(string.trim());
Reader in = new BufferedReader(sr);
int count = 0;
char[] buf = new char[16384];
while ((count = in.read(buf)) != -1) {
if (count > 0) caw.write(buf, 0, count);
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
return caw.toCharArray();
} /**
* 从二进制文件对象中读取内容并转换为字节数组
*
* @param file 要读取的File对象
* @return 读取后的字节数据
*/
public static byte[] readBytes(File file) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
InputStream fis = new FileInputStream(file);
InputStream is = new BufferedInputStream(fis);
int count = 0;
byte[] buf = new byte[16384];
while ((count = is.read(buf)) != -1) {
if (count > 0) baos.write(buf, 0, count);
}
is.close();
} catch (Exception e) {
e.printStackTrace();
}
return baos.toByteArray();
} /**
* 写字节数组内容到二进制文件
*
* @param file File对象
* @param data 输出字节数组
*/
public static void writeBytes(File file, byte[] data) {
try {
OutputStream fos = new FileOutputStream(file);
OutputStream os = new BufferedOutputStream(fos);
os.write(data);
os.close();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 写字符数组内容到文本文件
*
* @param file File对象
* @param data 输出字节数组
*/
public static void writeChars(File file, char[] data) {
try {
Writer fos = new FileWriter(file);
Writer os = new BufferedWriter(fos);
os.write(data);
os.close();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* Environment.getDataDirectory() +path 读取文件
*
* @see #localWriter(Bitmap, String, String)
*/
public static Bitmap localReader(String name, String path) {
File fileRe = null;
try {
File dataDirectory = Environment.getExternalStorageDirectory();
if (dataDirectory.exists()) {
fileRe = new File(dataDirectory.getPath() + File.separator + path + File.separator + name);
// 文件不存在
if (fileRe == null || !fileRe.exists()) {
return null;
} else {
return BitmapFactory.decodeFile(fileRe.getPath());
}
}
} catch (Exception e) {
return null;
}
return null;
} public static Bitmap localReaderByPath(String name, String path,Context context) {
File fileRe = null; try {
fileRe = new File(path + File.separator + MD5Util.md5(name));
// 文件不存在
if (fileRe == null || !fileRe.exists()) {
return null;
} else {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(fileRe.getPath(), options);
int width = options.outWidth;
int height = options.outHeight;
int inSampleSize = 1;
int size = width /context.getResources().getDisplayMetrics().widthPixels;
if (size > 0) {
inSampleSize = size;
}
Log.i("AsyncImageLoader", "height is: " + height + " width is: " + width + "sampleSize: " + inSampleSize);
options.inPurgeable = true;
options.inInputShareable = true;
options.inSampleSize = inSampleSize;
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(fileRe.getPath(),options);
}
} catch (Exception e) {
return null;
} } /**
* Environment.getDataDirectory()
*
* @param bm
* @param name
* @param path
* @return
* @see #localReader(String, String)
*/
public static boolean localWriter(Bitmap bm, String name, String path) {
File dataDirectory = Environment.getExternalStorageDirectory();
try {
if (dataDirectory.exists()) {
String s = dataDirectory.getPath() + File.separator + path + File.separator;
File write = new File(s);
if (!write.exists()) {
if (write.mkdirs()) {
FileOutputStream fileOutputStream = new FileOutputStream(new File(s + MD5Util.md5(name)));
fileOutputStream.write(StreamUtils.bitmap2Bytes(bm));
fileOutputStream.close();
}
} else {
FileOutputStream fileOutputStream = new FileOutputStream(new File(s + MD5Util.md5(name)));
fileOutputStream.write(StreamUtils.bitmap2Bytes(bm));
fileOutputStream.close();
}
}
} catch (Exception e) {
return false;
}
return true;
} /**
* Environment.getDataDirectory()
*
* @param bm
* @param name
* @param path
* @return
* @see #localReader(String, String)
*/
public static boolean localWriterByPath(Bitmap bm, String name, String path) {
try {
String s = path + File.separator;
File write = new File(s);
if (!write.exists()) {
if (write.mkdirs()) {
FileOutputStream fileOutputStream = new FileOutputStream(new File(s + MD5Util.md5(name)));
fileOutputStream.write(StreamUtils.bitmap2Bytes(bm));
fileOutputStream.close();
}
} else {
FileOutputStream fileOutputStream = new FileOutputStream(new File(s + MD5Util.md5(name)));
fileOutputStream.write(StreamUtils.bitmap2Bytes(bm));
fileOutputStream.close();
}
} catch (Exception e) {
return false;
}
return true;
}
}

工具类总结---(五)---SD卡文件管理的更多相关文章

  1. JQuery中的工具类(五)

    一:1.serialize()序列表表格内容为字符串.返回值jQuery示例序列表表格内容为字符串,用于 Ajax 请求. HTML 代码:<p id="results"&g ...

  2. 并发工具类(五) Phaser类

    前言   JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch.CyclicBarrier.Semphore.Exchanger.Ph ...

  3. IntentActionUtil【Intent的常见作用的工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 主要用于通过Intent调用手机本地软件打开文件(doc.xsl.pdf.ppt.mp3.mp4等格式).安装apk.发送邮件.拨打 ...

  4. Android工具类整合

    Android-JSONUtil工具类 常用的Json工具类,包含Json转换成实体.实体转json字符串.list集合转换成json.数组转换成json public class JSONUtil ...

  5. WP8.1 Study12:文件压缩与Known Folder(包含SD卡操作)

    一.文件压缩 当应用程序保存和加载数据,它可以使用压缩. 1.使用 Windows.Storage.Compression.Compressor 压缩,获得一个Compressor stream. v ...

  6. 基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil

    基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil,把日常能用到的各种CRUD都进行了简化封装,让普通程序员只需关注业务即可,因为非常简单,故直接贴源代码,大家若需使用可以直 ...

  7. BoneBlack am335x利用SD卡烧写板卡上的emmc

    参考ti论坛上面的一篇文章: 链接:https://pan.baidu.com/s/1SLSUbCRrIULJJf_BNI3sEQ 密码: hvem 自己稍微修改的debrick.sh 链接: htt ...

  8. 2019 SD卡、U盘无法格式化怎么办的解决方法

    有天 闲的没事, 格式化一下U盘 ,结果突然断电了,我的天.我还在格式化的U盘 ,果然 ,我在此启动电脑后,的U盘直接 就不能用了.于是 我格式化. 然后,我的U盘就怎么也格式化不好了 ,找到了几种解 ...

  9. JavaScript工具类(三):localStorage本地储存

    localStorage Web 存储 API 提供了 sessionStorage (会话存储) 和 localStorage(本地存储)两个存储对象来对网页的数据进行添加.删除.修改.查询操作. ...

随机推荐

  1. 运行错误:应用程序无法启动因为并行配置不正确。the application has failed to start because its side-by-side configuration is incorrect 解决方法

    问题描述: 当电脑同时安装VS2008和VS2008 SP1时,编译出来的Visual C++程序的manifest 文件会默认引用VS2008的MFC版本和CRT版本.如下: <depende ...

  2. webots自学笔记(六)实用控制器函数补充

    原创文章,来自"博客园,_阿龙clliu" http://www.cnblogs.com/clliu/,转载请注明原文章出处.       用Webots软件做机器人仿真时,可以编 ...

  3. Linux ubuntu 安装gcc、g++、 pcre、zlib、ssl、nginx和该内存不能为written解决方法

    1.楼主也是第一次接触Linux  如果有错误的地方还请各位朋友指出.... 2.gcc.g++依赖库:sudo apt-get install build-essential,sudoapt-get ...

  4. get_category_recommend_goods的正确使用

    get_category_recommend_goods($type = '', $cats = '', $brand = 0, $min =0,  $max = 0, $ext='') 位于lib_ ...

  5. UNION ALL合表查询

    有时候需要连表查询数据,可以使用union all来做合表. 语法: SELECT column_name FROM table1UNION ALLSELECT column_name FROM ta ...

  6. hdu 2157 How many ways?? (可达矩阵)

    题意:给你一个有向图,从A 点到 B点恰好经过k个点的方案数 (k < 20), 可以走重复边 思路:利用离散数学中的可达矩阵,可达矩阵的K次幂便是从i到j走K步能到达的方案数 代码: #inc ...

  7. JDBC基础学习(六)—数据库连接池

    一.数据库连接池介绍 1.数据库连接池的缘由      对于一个简单的数据库应用,由于对于数据库的访问不是很频繁.这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什 ...

  8. java 基础知识五 数组

    java  基础知识五  数组 数组保存的是一组有顺序的.具有相同类型的数据. 同一个数组中所有数据元素的数据类型都是相同的. 可以通过数组下标来访问数组,数据元素根据下标的顺序,在内存中按顺序存放 ...

  9. Parse error: syntax error, unexpected '[' in D:\phpStudy\WWW\tp5\thinkphp\library\think\Loader.php on line 18

    g刚学习tp5就遇到了这个问题  百思不得其解,看到官网说明 是基于PHP5.4 设计的  打开 phpstudy版本一看 就呵呵呵了 .还是5.3的版本.更换版本之后 就ok了.

  10. linux环境下 mysql数据库忘记密码 处理办法UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ;

    整个修改过程大概3-10分钟(看个人操作),这个时间内mysql出于不需要密码就能登陆的状态,请设法保证系统安全 不罗嗦直接上步骤 1.vi /etc/my.cnf 在[mysqld]下,添加一句:s ...