2015-03-09 2 views
0

Я пытаюсь сохранить мой выходной файл во внутреннем memory.but он бросает java.io.FileNotFoundException Доступ запрещенjava.io.FileNotFoundException Доступ запрещен в Android

private boolean crop() { 
    try { 
     FileOutputStream fos = null; 
     String filePath = CustomVideoGalleryActivity.videoPath.get(0); 
     Movie originalMovie = MovieCreator.build(filePath); 

     Track track = originalMovie.getTracks().get(0); 
     Movie movie = new Movie(); 
     movie.addTrack(new AppendTrack(new CroppedTrack(track, 200, 800))); 

     Container out = new DefaultMp4Builder().build(movie); 
     String outputFilePath = Environment.getDataDirectory()+ "/output_crop.mp4"; 
     fos = new FileOutputStream(new File(outputFilePath)); //throws Exception 
     out.writeContainer(fos.getChannel()); 
     fos.close(); 
     mProgressDialog.dismiss(); 
     finish(); 

    } catch (Exception e) { 
     Log.v("ONMESSAGE", e.toString()); 
     e.printStackTrace(); 
     mProgressDialog.dismiss(); 
     return false; 
    } 
    return true; 
    } 

ответ

1

Вы должны ask for write permission в вашем AndroidManifest.xml , В частности, должна присутствовать следующая строка:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

Сэра я хочу сохранить его во внутреннем хранилище моих device.I уже добавленного разрешения android.permission.WRITE_EXTERNAL_STORAGE в моем файле манифеста. но его не работает –

+0

Ой, моя ошибка. Вы не можете писать в '/ data'. См. Http://stackoverflow.com/questions/1998400/data-directory-has-no-read-write-permission-in-android – Saran

+0

Нет сэра. За несколько дней до того, как я уже проверил свой program.it работал fine.it хранили мой выходной файл во внутреннюю память моего устройства. Но теперь его показывающее исключение в моем logcat –

1

Вы не должны смотреть Справочник данных. Это системный каталог в хранилище телефона - обычно/data - и ваше приложение никогда не получит разрешения на его запись.

Каталог, в котором ваше приложение должно записывать файлы, возвращается методом Context.getFilesDir(). Это будет что-то вроде /data/data/com.yourdomain.YourApp/files.

Если вы хотите записать в файл в хранилище телефона, используйте метод Context.openFileOutput().

Если вам нужен путь к SDCard, используйте метод Environment.getExternalStorageDirectory(). Для того, чтобы написать на SDCard вам нужно дать вашему приложению соответствующие разрешения, добавив следующие строки в манифесте:

Если вы собираетесь писать в SDCard вам также необходимо проверить его с помощью метода getExternalStorageState().

Если вы храните небольшие файлы в своем приложении, они могут войти в память телефона, а не в SD-карту, поэтому используйте методы Context.openFileOutput() и Context.openFileInput().

Так что в вашем коде рассмотреть что-то вроде:

OutputStream os = openFileOutput("samplefile.txt", MODE_PRIVATE); 
BufferedWriter lout = new BufferedWriter(new OutputStreamWriter(os)); 
Смежные вопросы