【问题标题】:Android: No such file or directory found error?Android:没有找到这样的文件或目录错误?
【发布时间】:2017-04-08 01:26:59
【问题描述】:

我正在同时播放和录制音频,以便使用 musicg API 执行音频匹配分析。每次运行我的应用程序时,我都会收到以下错误:

V/playRecordAudio: Playing sound & recording stopped
 W/System.err: java.io.FileNotFoundException: /storage/emulated/0: open failed: EISDIR (Is a directory)
W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:452)
W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:127)
W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:116)
W/System.err:     at com.android.project1.main.fragments.SpeakersFragment.copyWaveFile(SpeakersFragment.java:316)
W/System.err:     at com.android.project1.main.fragments.SpeakersFragment.stopRecording(SpeakersFragment.java:284)
W/System.err:     at com.android.project1.main.fragments.SpeakersFragment.access$200(SpeakersFragment.java:45)
W/System.err:     at com.android.project1.main.fragments.SpeakersFragment$3.onCompletion(SpeakersFragment.java:176)
W/System.err:     at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:2821)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err:     at android.os.Looper.loop(Looper.java:148) 
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5417)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
W/System.err: Caused by: android.system.ErrnoException: open failed: EISDIR (Is a directory)
W/System.err:     at libcore.io.Posix.open(Native Method)
W/System.err:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:438)
W/System.err:   ... 14 more
W/System.err: java.io.FileNotFoundException: /storage/emulated/0/AudioRecorder/1491446370522.wav: open failed: ENOENT (No such file or directory)
W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:452)
W/System.err:     at java.io.FileInputStream.<init>(FileInputStream.java:76)
W/System.err:     at java.io.FileInputStream.<init>(FileInputStream.java:103)
W/System.err:     at com.android.project1.main.fragments.SpeakersFragment.getScore(SpeakersFragment.java:399)
W/System.err:     at com.android.project1.main.fragments.SpeakersFragment.stopRecording(SpeakersFragment.java:285)
W/System.err:     at com.android.project1.main.fragments.SpeakersFragment.access$200(SpeakersFragment.java:45)
W/System.err:     at com.android.project1.main.fragments.SpeakersFragment$3.onCompletion(SpeakersFragment.java:176)
W/System.err:     at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:2821)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err:     at android.os.Looper.loop(Looper.java:148)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5417)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
 W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
W/System.err:     at libcore.io.Posix.open(Native Method)
W/System.err:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:438)
W/System.err:   ... 13 more
I/System.out: 0.0
W/MediaPlayer: mediaplayer went away with unhandled events

我正在尝试将录音保存到文件中,然后将其传递给 getScore() 方法,以便将其与播放的原始音频文件进行比较并返回匹配的分数。以下是我的 MainActivity 中的相关代码,其中以粗体显示错误的行。

编辑1:

String mFileName = getFilename();
...
private void stopRecording() {
            if (null != recorder) {
                isRecording = false;

                int i = recorder.getState();
                if (i == 1)
                    recorder.stop();
                recorder.release();

                recorder = null;
                recordingThread = null;
            }

            copyWaveFile(getTempFilename(), mFileName);
            getScore(); //error here
            deleteTempFile();
        }

public void getScore (){

            String fileName1 = mFileName;
            String fileName2 = "R.raw.forrest_gump_theme"; //Need to change this

            try {
                //InputStream fis1 = null, fis2 = null;
                InputStream fis1, fis2;
                fis1 = new FileInputStream(fileName1);//error here
                fis2 = new FileInputStream(fileName2);

                Wave wave1 = new Wave(fis1), wave2 = new Wave (fis2);
                FingerprintSimilarity similarity;

                similarity = wave1.getFingerprintSimilarity(wave2);
                result = similarity.getSimilarity()*100;


            }catch (Exception e){
                e.printStackTrace();
            }
            System.out.println(result);
        }

【问题讨论】:

  • 看看你是如何在getFilename() 中创建文件名的。如果你调用它两次,相隔一毫秒,它每次都会返回一个不同的文件名。此外,"R.raw.forrest_gump_theme" 不会是有效的文件名。您不能像访问文件一样访问资源。
  • @MikeM。我对你答案的第一部分不是 100% 清楚。我调用 getFilename() 两次(一次在 getScore() 中,一次在 stopRecording 中),这是我问题的根源吗?另外,如果我不能直接调用文件名,如何访问资源?能否请提供更多详细信息。
  • 您在文件名中使用了System.currentTimeMillis()。如果当前时间发生变化,getFilename() 返回的 String 也会发生变化。保存第一次调用返回的值。此外,您可以通过在您的Activity 或其他Context 上调用getResources().openRawResource() 来获取原始资源的InputStream
  • @MikeM。请在我的问题中检查我的 EDIT 1,我考虑了您的 cmets。另外,对于资源文件,以下是否正确“ String fileName2 = getResources().openRawResource(R.raw.forrest_gump_theme);” ?
  • @MikeM。我认为如果你能发布一个完整的答案会非常有帮助,这样我就可以选择它来解决我的问题。

标签: java android audio-recording audio-fingerprinting


【解决方案1】:

我认为问题出在 copyWaveFile():

您将 mFileName 变量发送到 copyWaveFile() 但使用以下代码更改其路径:

 outFilename = Environment.getExternalStorageDirectory().getPath();

尝试删除上面的行并再次检查。如果同样的错误仍然存​​在,请告诉我。

【讨论】:

  • 第二个文件 (fis2) 出现同样的错误。我想我从资源文件夹中错误地调用了原始音频文件。 "String fileName2 = "R.raw.forrest_gump_theme";",正确的做法是什么?
  • 请查看以下原始文件链接:stackoverflow.com/questions/16741433/…
猜你喜欢
  • 2013-08-08
  • 1970-01-01
  • 2012-02-27
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 2020-03-28
相关资源
最近更新 更多