【Android】网络下载图片&SD卡文件存储
16lz
2021-01-26
(本博客的作用:可以使用源码在虚拟机里面的SD卡上添加图片(找到URL即可),可以用来操作SD卡上的文件)
以下是一个从网络下载图片的函数,放入URL即可:
1 public Bitmap returnBitMap(String url) { 2 URL myFileUrl = null; 3 Bitmap bitmap = null; 4 try { 5 myFileUrl = new URL(url); 6 } catch (MalformedURLException e) { 7 e.printStackTrace(); 8 } 9 try { 10 HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection(); 11 conn.setDoInput(true); 12 conn.connect(); 13 InputStream is = conn.getInputStream(); 14 bitmap = BitmapFactory.decodeStream(is); 15 is.close(); 16 } catch (IOException e) { 17 e.printStackTrace(); 18 } 19 if(bitmap == null){20 Log.d("RRRyy", "Null");21 }22 23 return bitmap; 24 }
比如传入:"http://pica.nipic.com/2008-04-01/200841194113617_2.jpg",返回的是bitmap
下面是一个传入bitmap和文件名(文件名要有扩展名),将图片存入SD卡的类:
1 import java.io.File; 2 import java.io.FileNotFoundException; 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 6 import android.graphics.Bitmap; 7 import android.os.Environment; 8 import android.util.Log; 9 10 /**11 * 保存图片的类12 * 13 * @author Administrator14 * 15 */16 public class PicSave {17 18 private final static String CACHE = "/Caochen";//存储的文件夹19 20 /**21 * 保存图片的方法22 * 保存到sdcard23 * @throws IOException24 */25 public void savePic(Bitmap b, String strFileName) {30 String filePath = isExistsFilePath();31 FileOutputStream fos = null;//流32 File file = new File(filePath, strFileName);33 if (file.exists()) {//如果存在,未处理34 } else {35 try {36 fos = new FileOutputStream(file);37 if (null != fos) {38 b.compress(Bitmap.CompressFormat.JPEG, 90, fos);//格式39 fos.flush();40 fos.close();41 Log.d("YYHU", "ok");42 }43 } catch (FileNotFoundException e) {44 e.printStackTrace();45 } catch (IOException e) {46 e.printStackTrace();47 }48 }49 }50 51 /**52 * 获取sd卡的缓存路径, 53 * 一般在卡中sdCard就是这个目录54 * 55 * @return SDPath56 */57 public static String getSDPath() {58 File sdDir = null;59 boolean sdCardExist = Environment.getExternalStorageState().equals(60 android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在61 if (sdCardExist) {62 sdDir = Environment.getExternalStorageDirectory();// 获取根目录63 } else {64 Log.e("ERROR", "没有内存卡");65 }66 return sdDir.toString();68 }69 70 /**71 * 获取缓存文件夹目录 如果不存在创建 否则则创建文件夹72 * 73 * @return filePath74 */75 private String isExistsFilePath() {76 String filePath = getSDPath()+CACHE;77 File file = new File(filePath);78 if (!file.exists()) {79 file.mkdirs();//建立文件夹80 }81 return filePath;82 }84 }
记住,为了正确运行上面两个类,一定要添加下面的权限:
1 <!-- 在SDCard中创建与删除文件权限 -->2 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 3 <!-- 往SDCard写入数据权限 -->4 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>5 <uses-permission android:name="android.permission.INTERNET"/>
为了更加清楚的知道SD卡文件夹的操作,我在源代码中加入如下输出:
1 /** 2 * 获取sd卡的缓存路径, 3 * 一般在卡中sdCard就是这个目录 4 * 5 * @return SDPath 6 */ 7 public static String getSDPath() { 8 File sdDir = null; 9 boolean sdCardExist = Environment.getExternalStorageState().equals(10 android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在11 if (sdCardExist) {12 sdDir = Environment.getExternalStorageDirectory();// 获取根目录13 } else {14 Log.e("ERROR", "没有内存卡");15 }16 Log.d("a", sdDir.getAbsolutePath());// /mnt/sdcard17 Log.d("b", sdDir.toString());// /mnt/sdcard18 Log.d("c", sdDir.getPath());// /mnt/sdcard19 Log.d("d", sdDir.getParent());// /mnt20 Log.d("e", sdDir.getName());// sdcard22 Log.d("g", sdDir.toURI() + "");// file:/mnt/sdcard23 return sdDir.toString();24 25 }
输出如注释所示!
下面为了更好的理解,贴出在SD卡中寻找所有图片的代码:输入为根目录,比如:/mnt/sdcard
1 import java.io.File; 2 import java.util.ArrayList; 3 4 import android.util.Log; 5 6 public class PicDir { 7 8 public void getFileDir(String opath){ 9 File f = new File(opath);10 File[] files = f.listFiles();11 if (files != null) {12 int count = files.length; 13 for (int i = 0; i < count; i++){14 File file = files[i];15 String filepath = file.getAbsolutePath();16 String path = file.getPath();17 18 if (filepath.endsWith("jpg") || filepath.endsWith("gif")|| filepath.endsWith("bmp")19 || filepath.endsWith("png")) {20 21 ArrayList<String> myFilePath=new ArrayList<String>();22 myFilePath.add(filepath);//这里每次扫描目录都会添加。23 24 for (String ll : myFilePath) {25 Log.e("myFilePath", ll.toString());26 }27 }28 else{ // 目标为文件夹,进入该文件夹继续遍历29 if (file.isDirectory()) {30 this.getFileDir(path);31 }32 }33 continue;34 }35 }36 }37 }
更多相关文章
- 【Android(安卓)Developers Training】 99. 获取联系人详细信息
- Android使用AOP实现动态权限获取
- Android如何通过手机自动获取短信验证码
- Android(安卓)libphonenumber Demo 手机号码归属地
- android的json解析-详解
- 实现图片的圆角,倒影,转换
- Android设置通知Notification
- Android(安卓)9.0 sdCard文件读写
- drawable(hdpi,ldpi,mdpi)的区别