2016-10-19 3 views
-2

У меня есть функция в моем проекте, которая позволяет пользователю записывать и воспроизводить звуковые заметки, которые хранятся локально. Если я задаю статическое имя для файла, все будет хорошо. Если я пытаюсь установить динамическое имя (например: System.currentTimeMillis()), файл не найден, когда я пытаюсь его воспроизвести. Вот мой код:Невозможно открыть .mp3 аудиозапись java.io.FileNotFoundException

записи бит:

public void startRecording() { 

    recorder = new MediaRecorder(); 
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setOutputFormat(output_formats[currentFormat]); 
    // recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    recorder.setOutputFile(getFileRecording()); 
    recorder.setOnErrorListener(errorListener); 
    recorder.setOnInfoListener(infoListener); 

    try { 
     recorder.prepare(); 
     recorder.start(); 
     isRecording = true; 
     showRecordingUI(); 

     handler.post(updateVisualizer); 

    } catch (IllegalStateException e) { 
     Log.e("Recording ::::: ", e.getMessage()); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     Log.e("Recording :: ", e.getMessage()); 
     e.printStackTrace(); 
    } 

    BuildDev.logDebug("WE ARE RECORDING!!!"); 


} 

и настройки имени файла (статическое имя):

private String getFileRecording() { 
    recordingFilepath = Environment.getExternalStorageDirectory().getPath(); 
    File file = new File(recordingFilepath, AUDIO_RECORDER_FOLDER); 

    if (!file.exists()) { 
     file.mkdirs(); 
    } 

    String fileName = "12345" 

    return (file.getAbsolutePath() + "/" + fileName + file_exts[currentFormat]); 
} 

это путь, который я получаю, когда я отладки:

/storage/emulated/0/everreach_audio_notes//12345.mp3 

и не динамический вариант, который, кажется, не работает:

private String getFileRecording() { 
    recordingFilepath = Environment.getExternalStorageDirectory().getPath(); 
    File file = new File(recordingFilepath, AUDIO_RECORDER_FOLDER); 

    if (!file.exists()) { 
     file.mkdirs(); 
    } 

    String fileName = String.valueOf(System.currentTimeMillis(); 

    return (file.getAbsolutePath() + "/" + "/" + fileName + file_exts[currentFormat]); 
} 

которые дают мне следующий путь:

/storage/emulated/0/everreach_audio_notes//1476878040697.mp3 

Когда я пытаюсь воспроизвести звуковой файл с именем динамическим, я получаю эту ошибку:

W/System.err: java.io.FileNotFoundException: /storage/emulated/0/everreach_audio_notes/11476880948244.mp3: open failed: ENOENT (No such file or directory) 
at java.io.FileInputStream.<init>(FileInputStream.java:76) 
at java.io.FileInputStream.<init>(FileInputStream.java:103) 
call_info.RecordingsListAdapter.startPlaying(RecordingsListAdapter.java:190) 
call_info.RecordingsListAdapter.access$500(RecordingsListAdapter.java:36) 
call_info.RecordingsListAdapter$2.onClick(RecordingsListAdapter.java:125) 
at android.view.View.performClick(View.java:4861) 
at android.view.View$PerformClick.run(View.java:19980) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:211) 
at android.app.ActivityThread.main(ActivityThread.java:5373) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815) 
Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) 
at libcore.io.Posix.open(Native Method) 
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
at libcore.io.IoBridge.open(IoBridge.java:451) 
+0

Попробуйте удалить одну косую черту дорожка? У вас /storage/emulated/0/audio_notes/1476878040697.mp3? – krossovochkin

+0

не запускается. Попробуйте прочитать из файла, полученного другим способом, чем упомянутый здесь? Обратите внимание, что он пытается открыть файл в каталоге everreach_audio_notes, а не audio_notes –

+0

Привет, premek, извините, что это была опечатка на моей стороне. –

ответ

1

Replace

return (file.getAbsolutePath() + "/" + "/" + fileName + file_exts[currentFormat]); 

от

return (file.getAbsolutePath() + "/" + fileName + file_exts[currentFormat]); 
+0

java.io.FileNotFoundException:/storage/emulated/0/audio_notes/11476884497361.mp3: open failed: ENOENT (Нет такого файла или каталога). Я попробовал, ничего не делает. –

+1

Перейти к этому пути вручную и проверить этот файл существует или нет –

+0

если файл не существует, то укажите код записи файла –

0

проверка трассировки стека снова

java.io.FileNotFoundException: /storage/emulated/0/everreach_audio_notes/11476880948244.mp3: open failed: ENOENT (No such file or directory) 

и вы говорите, вы получите

/storage/emulated/0/audio_notes//1476878040697.mp3 

от getFileRecording() метод

/everreach_audio_notes/ и /audio_notes/ не то же самое

+0

Извинения, это была опечатка на моей стороне. –

+0

все проверить и предоставить точные данные, если вам нужна помощь ... никто не может помочь, если вопрос неправильный –

Смежные вопросы