从Raw文件夹读取文件给File not found异常

时间:2019-01-25 12:16:34

标签: android

我正在尝试从Raw文件夹中读取文件dev.txt

我已放置文件:

enter image description here


Uri uri=Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + File.pathSeparator + File.separator + CaringApp.getAppInstance().getPackageName() + "/raw/" + "dev.txt");
PEMParser pemParser = new PEMParser(new FileReader(uri.getPath()));

我遇到了例外情况:

java.io.FileNotFoundException: /com.appname.organizer/raw/dev: open failed: ENOENT (No such file or directory)

在线:

PEMParser pemParser = new PEMParser(new FileReader(uri.getPath()));

4 个答案:

答案 0 :(得分:0)

  

我正在尝试从Raw文件夹中读取文件dev.txt

这是开发计算机上的文件。它不是Android设备上的文件。 FileReader不起作用。

相反,请在openRawResource()对象上使用Resources以获取InputStream。如有必要,将其包装在InputStreamReader中。

答案 1 :(得分:0)

在我的应用中,我已经使用了它,并且对我有用:

URL url = getClass().getResource("/assets/dev.txt");
File f = new File(url.toURI());

或者您可以使用getResourceAsStream()方法直接获取输入流:

InputStream  is= getClass().getResourceAsStream("/assets/levels.txt");
isr = new InputStreamReader(is);

答案 2 :(得分:0)

尝试删除文件名的扩展名。例如。 “ dev”而不是“ dev.txt”,例如:

Uri uri=Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + File.pathSeparator + File.separator + CaringApp.getAppInstance().getPackageName() + "/raw/" + "dev");

答案 3 :(得分:0)

我正在使用此功能将二进制文件从原始文件复制到应用程序文件dir,然后从那里执行二进制文件。

    File dev = new File(getApplicationContext().getFilesDir(), "dev.txt");

        if (!dev.exists()) {
            try {
                dev.createNewFile();
            } catch (IOException e) {
                Log.e(TAG, "Failed to create new file!", e);
            }
        installBinaryFromRaw(this, R.raw.dev, dev);   

将文件从原始文件复制到/ data / data // file / filename的功能

    public static void installBinaryFromRaw(Context context, int resId, File file) {
        final InputStream rawStream = context.getResources().openRawResource(resId);
        final OutputStream binStream = getFileOutputStream(file);

        if (rawStream != null && binStream != null) {
            pipeStreams(rawStream, binStream);

            try {
                rawStream.close();
                binStream.close();
            } catch (IOException e) {
                Log.e(TAG, "Failed to close streams!", e);
            }

            doChmod(file, 755);
        }
    }