网络下载图片&SD卡文件存储

(本博客的作用:可以使用源码在虚拟机里面的SD卡上添加图片(找到URL即可),可以用来操作SD卡上的文件)

以下是一个从网络下载图片的函数,放入URL即可: 

复制代码
 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());//       sdcard
22      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     }
posted @ 2013-03-25 20:18  暂时菜鸟  Views(165)  Comments(0Edit  收藏  举报