zoukankan      html  css  js  c++  java
  • 【Android】网络下载图片&SD卡文件存储

    (本博客的作用:可以使用源码在虚拟机里面的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 Administrator
    14 * 
    15 */
    16 public class PicSave {
    17 
    18         private final static String CACHE = "/Caochen";//存储的文件夹
    19 
    20         /**
    21          * 保存图片的方法
    22          * 保存到sdcard
    23          * @throws IOException
    24          */
    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 SDPath
    56          */
    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 filePath
    74          */
    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/sdcard
    17                 Log.d("b", sdDir.toString());//      /mnt/sdcard
    18                 Log.d("c", sdDir.getPath());//       /mnt/sdcard
    19                 Log.d("d", sdDir.getParent());//      /mnt
    20                 Log.d("e", sdDir.getName());//       sdcard22                 Log.d("g", sdDir.toURI() + "");//     file:/mnt/sdcard
    23                 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 }
  • 相关阅读:
    Nginx解决跨域
    子网掩码的作用
    并发与并行
    Java8 parallelStream与迭代器Iterator性能
    Spring Data MongDB空间索引(判断一个点Point是否在一个区域Polygon内)
    BeanFactory的实现原理
    序列化以及反序列化
    MongoDB用户名和密码
    Cannot assign to 'self' outside of a method in the init family
    OC方法和文件编译
  • 原文地址:https://www.cnblogs.com/lqminn/p/2694512.html
Copyright © 2011-2022 走看看