2015-08-06 3 views
0

Не уверен, что я делаю неправильно точно, но получаю эту ошибку при попытке сохранить растровое изображение в PNG файла:java.io.FileNotFoundException: открыть не удалось: ENOENT (Нет такого файла или каталога)

java.io.FileNotFoundException: /storage/emulated/0/storage/emulated/0/Pictures/HelloCamera/VID_20150806_124818.png: не не удалось открыть: ENOENT (нет такого файла или каталога)

private File getVideoThumb(String mediaPath, Uri videoUri) { 
    Bitmap bmThumbnail; 
    bmThumbnail = ThumbnailUtils.createVideoThumbnail(mediaPath, MediaStore.Video.Thumbnails.MINI_KIND); 
    File fPath = Environment.getExternalStorageDirectory(); 
    String[] tokens = mediaPath.split("\\.(?=[^\\.]+$)"); 
    File f = null; 
    f = new File(fPath, tokens[0] + ".png"); 
    FileOutputStream out = null; 
    try { 
     out = new FileOutputStream(f); 
     bmThumbnail.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance 
     // PNG is a lossless format, the compression factor (100) is ignored 
    } catch (Exception e) { 
     Log.d(Constants.DEBUG, "ERROR saving the compressed bitmap " + e); 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (out != null) { 
       out.flush(); 
       out.close(); 
      } 
     } catch (IOException e) { 
      Log.d(Constants.DEBUG, "ERROR closing out stream for file for bitmap"); 
      e.printStackTrace(); 
     } 
    } 
    return f; 
} 

ошибка, кажется, указана bein г повтор в каталоге /storage/emulated/0/

Как вынуть вторую из этого ... что регулярное выражение я попытался это:

int index = mediaPath.lastIndexOf("\\"); 
String fileName = mediaPath.substring(index + 1); 
String[] tokens = fileName.split("\\.(?=[^\\.]+$)"); 
+2

Я думаю «/ хранение/emulated/0/storage/emulated/0/"должно быть"/storage/emulated/0/"? Ваша операция разделения не работает должным образом. – fhissen

+0

Может быть, вы можете дать нам одно примерное значение 'mediapath'? – MrT

+0

fhissen Я вижу, что это ошибка, как я могу просто извлечь из медиа-пути это /storage/emulated/0/Pictures/HelloCamera/VID_20150806_131011.mp4 тогда только эта часть VID_20150806_131011 – Lion789

ответ

0

Если попробовать:

File f = null; 
f = new File(mediaPath); 
System.out.println(f.getName().split("\\.")[0] + ".png"); 

вы получите последний токен, который вы хотите.

Input: /storage/emulated/0/Pictures/HelloCamera/VID_20150806_131011.mp4 
Output: VID_20150806_131011.png 
+0

Я хочу сохранить его как другое имя файла, как png, так как это миниатюра. – Lion789

+0

MrT пытается добавить png – Lion789

+0

. Я разделил его и добавлю png. – MrT

0

Я закончил тем, переходящим в FileName в getVideoThumb благодаря @fhissen заставила меня знать о дубликате пути ... код будет выглядеть так ...

private File getVideoThumb(String mediaPath, String mediaName, Uri videoUri) { 
     Bitmap bmThumbnail; 

//MINI 512x334 
     bmThumbnail = ThumbnailUtils.createVideoThumbnail(mediaPath, MediaStore.Video.Thumbnails.MINI_KIND); 

     File fPath = Environment.getExternalStorageDirectory(); 


     String[] tokens = mediaName.split("\\.(?=[^\\.]+$)"); 
     File f = null; 

     f = new File(fPath, tokens[0] +".png"); 
     FileOutputStream out = null; 
     try { 


      out = new FileOutputStream(f); 
      bmThumbnail.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance 
      // PNG is a lossless format, the compression factor (100) is ignored 
     } catch (Exception e) { 
      Log.d(Constants.DEBUG, "ERROR saving the compressed bitmap " + e); 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (out != null) { 
        out.flush(); 
        out.close(); 
       } 
      } catch (IOException e) { 

       Log.d(Constants.DEBUG, "ERROR closing out stream for file for bitmap"); 
       e.printStackTrace(); 
      } 
     } 

     return f; 
    } 
Смежные вопросы