FileDescriptor:错误android.system.ErrnoException:打开失败:ENOENT(没有这样的文件或目录)

问题描述:

我知道这是一个相当普遍的问题,但是我正在努力获取输出。以下是我的代码:FileDescriptor:错误android.system.ErrnoException:打开失败:ENOENT(没有这样的文件或目录)

try { 
     FileInputStream fileInputStream = new FileInputStream(new File("/Users/JackPowell/AndroidStudioProjects/Shaker/app/src/main/res/raw/na.mp3")); 

     FileDescriptor fd = fileInputStream.getFD(); 

    }catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

错误显示该目录不存在。有人能告诉我什么是错的吗?

/Users/JackPowell/AndroidStudioProjects/Shaker/app/src/main/res/raw/na.mp3是OS X机器上文件的路径。 AFAIK,在这个星球上有零个Android设备,其/Users目录不在根目录。

我的猜测是你正在尝试阅读原始资源。在这种情况下,请使用Resources及其openRawResource()方法,并传入R.raw.na。您可以通过getResources()从任何Context(例如您的活动)获得Resources对象。

+0

您好,感谢答复。你介意给我一个示例解决方案作为未来的参考吗?谢谢 – JackPowell

+0

@JackPowell:https://github.com/commonsguy/cw-omnibus/blob/v7.6/WidgetCatalog/ExpandableListView/app/src/main/java/com/commonsware/android/wc/elv/MainActivity.java #L43 – CommonsWare

这是我的解决方案:

AssetFileDescriptor afd = mContext.getResources().openRawResourceFd(R.raw.na); 
    try { 
     mPlayer.setDataSource(afd.getFileDescriptor()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    mPlayer.prepare; 
    mPlayer.setOnPreparedListener(this);