1 import android.content.Context;
2 import android.graphics.Bitmap;
3 import android.graphics.BitmapFactory;
4 import android.os.Environment;
5 import android.os.StatFs;
6 import android.util.Log;
7
8 import java.io.BufferedInputStream;
9 import java.io.BufferedOutputStream;
10 import java.io.ByteArrayOutputStream;
11 import java.io.File;
12 import java.io.FileInputStream;
13 import java.io.FileOutputStream;
14 import java.io.IOException;
15
16 public class SDCardHelper {
17
18 // 往SD卡的私有Files目录下保存文件
19 public static void saveFileToSDCardPrivateFilesDir(Context context, String data, String type, String fileName, boolean append) throws Exception {
20 BufferedOutputStream bos = null;
21 {
22 try {
23 File file = context.getExternalFilesDir(type);
24
25 bos = new BufferedOutputStream(new FileOutputStream(new File(file, fileName), append));
26 bos.write(ComFn.stringTobytes(data) );
27 bos.flush();
28
29 Log.e("Trancy Save "+fileName+" Data: ", data);
30 } catch (Exception e) {
31 e.printStackTrace();
32 throw e;
33 } finally {
34 try {
35 if(bos != null) {
36 bos.close();
37 }
38 } catch (IOException e) {
39 e.printStackTrace();
40 }
41 }
42 }
43 }
44
45 // 从SD卡获取文件
46 public static String loadFileFromSDCard(String filePath) throws Exception{
47 BufferedInputStream bis = null;
48 ByteArrayOutputStream baos = new ByteArrayOutputStream();
49
50 try {
51 File file = new File(filePath);
52 if(!file.exists()){
53 return "";
54 }
55
56 bis = new BufferedInputStream(new FileInputStream(file));
57 byte[] buffer = new byte[8 * 1024];
58 int c = 0;
59 while ((c = bis.read(buffer)) != -1) {
60 baos.write(buffer, 0, c);
61 baos.flush();
62 }
63
64 Log.e("Trancy Load "+filePath+" Data: ", baos.toString());
65 return baos.toString();
66 } catch (Exception e) {
67 e.printStackTrace();
68 throw e;
69 } finally {
70 try {
71 if(baos!=null) {
72 baos.close();
73 }
74 if(bis!=null) {
75 bis.close();
76 }
77 } catch (IOException e) {
78 e.printStackTrace();
79 throw e;
80 }
81 }
82 }
83
84 // 从sdcard中删除文件
85 public static boolean removeFileFromSDCard(String filePath) {
86 File file = new File(filePath);
87 if (file.exists()) {
88 try {
89 file.delete();
90 return true;
91 } catch (Exception e) {
92 return false;
93 }
94 } else {
95 return false;
96 }
97 }
98
99 // 判断SD卡是否被挂载
100 public static boolean isSDCardMounted() {
101 // return Environment.getExternalStorageState().equals("mounted");
102 return Environment.getExternalStorageState().equals(
103 Environment.MEDIA_MOUNTED);
104 }
105
106 // 获取SD卡的根目录
107 public static String getSDCardBaseDir() {
108 if (isSDCardMounted()) {
109 return Environment.getExternalStorageDirectory().getAbsolutePath();
110 }
111 return null;
112 }
113
114 public static String getSDCardBaseDiraa(Context context) {
115
116 if (isSDCardMounted()) {
117 return Environment.getExternalStorageDirectory().getAbsolutePath();
118 }
119 return null;
120 }
121
122
123 // 获取SD卡的完整空间大小,返回MB
124 public static long getSDCardSize() {
125 if (isSDCardMounted()) {
126 StatFs fs = new StatFs(getSDCardBaseDir());
127 long count = fs.getBlockCountLong();
128 long size = fs.getBlockSizeLong();
129 return count * size / 1024 / 1024;
130 }
131 return 0;
132 }
133
134 // 获取SD卡的剩余空间大小
135 public static long getSDCardFreeSize() {
136 if (isSDCardMounted()) {
137 StatFs fs = new StatFs(getSDCardBaseDir());
138 long count = fs.getFreeBlocksLong();
139 long size = fs.getBlockSizeLong();
140 return count * size / 1024 / 1024;
141 }
142 return 0;
143 }
144
145 // 获取SD卡的可用空间大小
146 public static long getSDCardAvailableSize() {
147 if (isSDCardMounted()) {
148 StatFs fs = new StatFs(getSDCardBaseDir());
149 long count = fs.getAvailableBlocksLong();
150 long size = fs.getBlockSizeLong();
151 return count * size / 1024 / 1024;
152 }
153 return 0;
154 }
155
156 // 往SD卡的公有目录下保存文件
157 public static boolean saveFileToSDCardPublicDir(byte[] data, String type, String fileName) {
158 BufferedOutputStream bos = null;
159 if (isSDCardMounted()) {
160 File file = Environment.getExternalStoragePublicDirectory(type);
161 try {
162 bos = new BufferedOutputStream(new FileOutputStream(new File(file, fileName)));
163 bos.write(data);
164 bos.flush();
165 return true;
166 } catch (Exception e) {
167 e.printStackTrace();
168 } finally {
169 try {
170 bos.close();
171 } catch (IOException e) {
172 // TODO Auto-generated catch block
173 e.printStackTrace();
174 }
175 }
176 }
177 return false;
178 }
179
180 // 往SD卡的自定义目录下保存文件
181 public static boolean saveFileToSDCardCustomDir(byte[] data, String dir, String fileName) {
182 BufferedOutputStream bos = null;
183 if (isSDCardMounted()) {
184 File file = new File(getSDCardBaseDir() + File.separator + dir);
185 if (!file.exists()) {
186 file.mkdirs();// 递归创建自定义目录
187 }
188 try {
189 bos = new BufferedOutputStream(new FileOutputStream(new File(file, fileName)));
190 bos.write(data);
191 bos.flush();
192 return true;
193 } catch (Exception e) {
194 e.printStackTrace();
195 } finally {
196 try {
197 bos.close();
198 } catch (IOException e) {
199 // TODO Auto-generated catch block
200 e.printStackTrace();
201 }
202 }
203 }
204 return false;
205 }
206
207 // 往SD卡的私有Cache目录下保存文件
208 public static boolean saveFileToSDCardPrivateCacheDir(byte[] data, String fileName, Context context) {
209 BufferedOutputStream bos = null;
210 if (isSDCardMounted()) {
211 File file = context.getExternalCacheDir();
212 try {
213 bos = new BufferedOutputStream(new FileOutputStream(new File(file, fileName)));
214 bos.write(data);
215 bos.flush();
216 return true;
217 } catch (Exception e) {
218 e.printStackTrace();
219 } finally {
220 try {
221 bos.close();
222 } catch (IOException e) {
223 // TODO Auto-generated catch block
224 e.printStackTrace();
225 }
226 }
227 }
228 return false;
229 }
230
231 // 保存bitmap图片到SDCard的私有Cache目录
232 public static boolean saveBitmapToSDCardPrivateCacheDir(Bitmap bitmap, String fileName, Context context) {
233 if (isSDCardMounted()) {
234 BufferedOutputStream bos = null;
235 // 获取私有的Cache缓存目录
236 File file = context.getExternalCacheDir();
237
238 try {
239 bos = new BufferedOutputStream(new FileOutputStream(new File(file, fileName)));
240 if (fileName != null && (fileName.contains(".png") || fileName.contains(".PNG"))) {
241 bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);
242 } else {
243 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
244 }
245 bos.flush();
246 } catch (Exception e) {
247 e.printStackTrace();
248 } finally {
249 if (bos != null) {
250 try {
251 bos.close();
252 } catch (IOException e) {
253 e.printStackTrace();
254 }
255 }
256 }
257 return true;
258 } else {
259 return false;
260 }
261 }
262
263 // 从SDCard中寻找指定目录下的文件,返回Bitmap
264 public Bitmap loadBitmapFromSDCard(String filePath) throws Exception {
265 byte[] data = loadFileFromSDCard(filePath).getBytes();
266 if (data != null) {
267 Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
268 if (bm != null) {
269 return bm;
270 }
271 }
272 return null;
273 }
274
275 // 获取SD卡公有目录的路径
276 public static String getSDCardPublicDir(String type) {
277 return Environment.getExternalStoragePublicDirectory(type).toString();
278 }
279
280 // 获取SD卡私有Cache目录的路径
281 public static String getSDCardPrivateCacheDir(Context context) {
282 return context.getExternalCacheDir().getAbsolutePath();
283 }
284
285 // 获取SD卡私有Files目录的路径
286 public static String getSDCardPrivateFilesDir(Context context, String type) {
287 return context.getExternalFilesDir(type).getAbsolutePath();
288 }
289
290 public static boolean isFileExist(String filePath) {
291 File file = new File(filePath);
292 return file.isFile();
293 }
294 }

Android中操作 SDCard文件的更多相关文章

  1. android 中获取视频文件的缩略图(非原创)

    在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRet ...

  2. Android中使用File文件进行数据存储

    Android中使用File文件进行数据存储 上一篇学到使用SharedPerences进行数据存储,接下来学习一下使用File进行存储 我们有时候可以将数据直接以文件的形式保存在设备中, 例如:文本 ...

  3. 修改Android中strings.xml文件, 动态改变数据

    有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name=&qu ...

  4. Android中得到布局文件对象有三种方式

    Android中得到布局文件对象有三种方式 第一种,通过Activity对象 View view = Activity对象.getLayoutInflater().inflater(R.layout. ...

  5. Android中的gen文件为空或者不存在的处理方法

    Android中的gen文件时链接程序和XML中资源定义的桥梁,所以如果gen文件夹为空可能有以下的几个原因: 1.XML文件错误,这时可以检查res文件夹中的文件是否有错误 2.导入新的Androi ...

  6. python中操作csv文件

    python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...

  7. Android中使用SDcard进行文件的读取

    来自:http://www.cnblogs.com/greatverve/archive/2012/01/13/android-SDcard.html 平时我们需要在手机上面存储想音频,视频等等的大文 ...

  8. Android中在sdcard上创建文件夹

    //在SD卡上创建一个文件夹    public void createSDCardDir(){     if(Environment.MEDIA_MOUNTED.equals(Environment ...

  9. Android中访问sdcard路径的几种方式

    以前的Android(4.1之前的版本)中,SDcard路径通过"/sdcard"或者"/mnt/sdcard"来表示,而在JellyBean(安卓4.1)系统 ...

  10. Android中的资源文件

    最近复习Android资源文件的内容,留下点记录以备后用. Android中的资源主要是指存放在应用程序或者Framework相应包下/res中的内容.它们可以被本地化,如果必要的话会被编译成二进制文 ...

随机推荐

  1. springcloud zuul网关整合swagger2,swagger被拦截问题

    首先感谢一位博主的分享https://www.cnblogs.com/xiaohouzai/p/8886671.html 话不多说直接上图和代码 首先我们要有一个springcloud分布式项目 我就 ...

  2. Mac的Dock栏是什么?Mac Dock栏使用技巧

    ​ Dock栏就是Mac电脑屏幕下方的那一排快捷键,我们可以把自己常用的程序放到Dock上面,这样可以帮助我们快速的打开自己想要打开的文件和程序,默认情况下,OS X 的 Dock 置于屏幕的底部.当 ...

  3. RockyLinux8.7 制作OpenSSH9.2 rpm包

    由于系统原装的openssh存在高危的漏洞,安全扫描不过,故制作出最新版本的rpm包修复openssh高危漏洞. 1.安装基础环境工具 dnf install wget make gcc perl r ...

  4. k8s 删除 node节点

    查看现有状态 [root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady control-plan ...

  5. docker部署flask+uwsgi+nginx+postgresql,解耦拆分到多个容器,实现多容器互访

    本人承诺,本博客内容,亲测有效. dockerfile文件, FROM centos:7 RUN mkdir /opt/flask_app COPY ./show_data_from_jira /op ...

  6. mybatis中xml新增一条数据获取自增id

    在insert的标签里加两个属性:useGeneratedKeys="true"         keyProperty="patentId"   ,这个key ...

  7. 小白之Python-基础中的基础02

    Python-基础中的基础02 继续整理笔记,反复练习!fighting! -----------------华丽的分界线-------------变量:第一次出现叫做定义变量,再次出现为为该变量赋值 ...

  8. Linux上的I2C基础知识

    Linux上的I2C基础知识 什么是I2C I2C(Inter-Integrated Circuit,eye-squared-C),也称为 I2C 或 IIC,是一种同步.多控制器/多目标(主/从). ...

  9. zabbix利用python3脚本进行钉钉报警

    1.新建脚本dingding.py内容如下   注意需要用unix格式  不然会报错/usr/bin/python3^M #!/usr/bin/python3import requestsimport ...

  10. 攻防世界-Web_php_include(data协议)

    一道简单的文件包含题目 分析代码可知php://被ban了 此题可以用data://协议 payload为(以下两者皆可使用) ?page=data://text/plain,<?php%20s ...