2016-04-28 59 views
0

这是我写一个函数,尝试:如何创建一个目录,将图片保存到它的Android

  1. 创建一个文件夹与用户名
  2. 保存的内部.JPG该 文件夹

的文件夹创建工作正常,但是当我尝试保存的照片,它们都保存正确的名称,但他们没有在他们的预期的文件夹中保存。换句话说,我没有一个文件夹包含一组文件夹,每个文件夹都包含一张图片,我有一个文件夹包含一堆空文件夹,还有一堆图片放在文件夹外(我可以在需要时澄清)。

这是我的代码:

public void addToDir(List<Contact> list){ 

     for(int i = 0; i < list.size(); i++){ 

      String nameOfFolder = list.get(i).getName(); 
      Bitmap currentBitmap = list.get(i).getBusiness_card(); 

      String conName = Environment.getExternalStorageDirectory() + File.separator + "MyApp" + File.separator + 
        "Connected Accounts" + File.separator + nameOfFolder; 

      File conDir = new File(conName); 

      if (!conDir.mkdirs()) { 
       if (conDir.exists()) { 
       } else { 
        return; 
       } 
      } 

      try { 
       FileOutputStream fos = new FileOutputStream(conName + ".jpg", true); 
       currentBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 

       fos.flush(); 
       fos.close(); 
      } catch (Exception e) { 
       Log.e("MyLog", e.toString()); 
      } 
     } 
    } 

我怀疑问题是与FileOutputStream中的路径,但我不知道如何设置它,这样它设置为我刚才创建的文件夹。

非常感谢

+0

你可以尝试FileOutputStream中FOS =新的FileOutputStream中(CONNAME +文件分割符+ “image.jpg的”,真正的); 注:未经测试 –

+0

这工作!感谢您的简单而有效的解决方案 – ethanzh

回答

0

这是如何定义mFileTemp

String state = Environment.getExternalStorageState(); 
File mFileTemp; 
if (Environment.MEDIA_MOUNTED.equals(state)) { 
//this is like that 
//directory : any folder name/you can add inner folders like that/your photo name122412414124.jpg 
mFileTemp = new File(Environment.getExternalStorageDirectory()+File.separator+"any folder name"+File.separator+"you can add inner folders like that" 
     , "your photo name"+System.currentTimeMillis()+".jpg"); 
mFileTemp.getParentFile().mkdirs(); 
} 
else { 
mFileTemp = new File(getFilesDir()+"any folder name"+ 
     File.separator+"myphotos")+File.separator+"profilephotos", "your photo name"+System.currentTimeMillis()+".jpg"); 
mFileTemp.getParentFile().mkdirs(); 

这是我保存任何图像

try { 
     InputStream inputStream = getContentResolver().openInputStream(data.getData()); 
     FileOutputStream fileOutputStream = new FileOutputStream(mFileTemp); 
     copyStream(inputStream, fileOutputStream); 
     fileOutputStream.close(); 
     inputStream.close(); 
    } catch (Exception e) { 
     Log.e("error save", "Error while creating temp image", e); 
    } 

而且copyStream方法

public static void copyStream(InputStream input, OutputStream output) throws IOException { 
    byte[] buffer = new byte[1024]; 
    int bytesRead; 
    while ((bytesRead = input.read(buffer)) != -1) { 
     output.write(buffer, 0, bytesRead); 
    } 
} 
+0

这也是可行的。有没有办法在写入文件之前检查文件夹/图像是否存在? – ethanzh

+0

你可以检查这个问题:http://stackoverflow.com/questions/2625419/check-if-directory-exist-on-androids-sdcard你可以使用我的答案,这也是 –

相关问题