当前位置: 首页 > 知识库问答 >
问题:

如何在Android Studio中获取原始资源的文件路径?

殳凯捷
2023-03-14

我一直在使用本教程对图片进行人脸检测。问题是当我获取java上使用的文件路径时

String xmlFile = "E:/OpenCV/facedetect/lbpcascade_frontalface.xml";
CascadeClassifier classifier = new CascadeClassifier(xmlFile);

我怎么能在android Studio上翻译。我试着把我的lbpcascade_frontalface.xml放在原始资源上。Cascade分类器是opencv库提供的一个类。唯一的问题是他们只加载字符串路径(在xmlfile上)。这是我的代码。

String pathtoRes = getRawPathAtempt2(context);
CascadeClassifier cascadeClassifier = new CascadeClassifier();
cascadeClassifier.load(pathtoRes);

我翻译成这样的方法。

  public String getRawPathAtempt2(Context context) {
    return "android.resource://" + context.getPackageName() + "/raw/" + "lbpcascade_frontalface.xml";
}

我得到opencv的一个片段错误,它告诉我文件为空。这意味着在我的方法中使用文件路径时我错了。如何获取原始资源上的文件路径?请帮帮我,我已经被困了好几天了

共有3个答案

陈功
2023-03-14
Uri video = Uri.parse("android.resource://com.test.test/raw/filename");

使用此您可以访问原始文件夹中的文件,如果您想访问资产文件夹中的文件,请使用此URL...

file:///android_asset/filename

确保没有将扩展名添加到文件名中。例如“/movie”不是“/movie.mp4”。

请参阅此链接:

原始文件夹url路径?

曾华翰
2023-03-14

这是我如何解决的问题与@通用软件答案

我正在使用输入流获取文件

is = context.getResources().openRawResource(R.raw.lbpcascade_frontalface);

所以make文件将被打开,我将指出file类

 File cascadeDir = context.getDir("cascade", Context.MODE_PRIVATE);
 mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml"); 

然后我用getAbsolutePath这样搜索路径文件

 cascadeClassifier.load(mCascadeFile.getAbsolutePath());

看看我的完整代码

try {
        is = context.getResources().openRawResource(R.raw.lbpcascade_frontalface);
        File cascadeDir = context.getDir("cascade", Context.MODE_PRIVATE);
        mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml");

        os = new FileOutputStream(mCascadeFile);

        byte[] buffer = new byte[4096];
        int bytesRead;
        while ((bytesRead = is.read(buffer)) != -1) {
            os.write(buffer, 0, bytesRead);
        }

        is.close();
        os.close();

        cascadeClassifier.load(mCascadeFile.getAbsolutePath());


    } catch (IOException e) {
        Log.i(TAG, "face cascade not found");
    }
鲜于煜祺
2023-03-14

如何获取原始资源上的文件路径?

你不能。没有路径。它是你开发机器上的一个文件。它不是设备上的文件。相反,它是APK文件中的一个条目,是你在设备上的应用。

如果您的库支持InputStream而不是文件系统路径,则在Context上的getResources(). openRawResources()可以在原始资源上获得InputStream

 类似资料:
  • 问题内容: 我正在尝试获取资源的途径,但是我没有运气。 这是可行的(在IDE和JAR中都可以),但是这样一来,我无法获取文件的路径,只能获取文件内容: 如果我这样做: 结果是: 有没有办法获取资源文件的路径? 问题答案: 这是故意的。“文件”的内容可能无法作为文件使用。请记住,您正在处理的类和资源可能是JAR文件或其他类型的资源的一部分。类加载器不必为资源提供文件句柄,例如jar文件可能尚未扩展为

  • 问题内容: 我正在尝试在Android Studio的res \ raw文件中保留一个.txt文件,并读取/解析该文件。我在“ res”目录(未创建)中创建的名为“ raw”的文件夹中有一个文件“ my_file.txt”。 我认为我的主要问题是:创建File对象(与Scanner对象一起使用)时,应该为文本文件传递什么路径? 这是我的代码: 问题答案: 认为您正在寻找符合以下条件的东西 其中ct

  • 问题内容: 我有许多文本文件,希望将它们放入for循环中。 我从上一个活动中获得了一个具有资源名称的Extra,并且有一个数组,其原始资源中的文本文件的资源名称来自{d0,d1,d2,d3,…,d79},我想检查名称和数组名称,然后将查找名称放入资源!我的代码(res = R.raw。(d [i]))出现错误: 问题答案: 您可以使用getIdentifier(字符串名称,字符串defType,字

  • 我正在使用Eclipse Plugin-in-project开发一个Eclipse插件,它将在工具栏中添加一个菜单项。 请帮我解决这个问题!

  • 我也试着做 而我不断得到这个结果。

  • 问题内容: 我知道如何使用读取带有的目录,但是对于我的特殊用例,我需要一个。我需要一个专门的原因是因为我需要通过调用从它获取对象。 这是我到目前为止的代码,它从中读取数据(在我的情况下为原语列表): 我曾尝试通过创建一个,但这只会导致: 有没有一种方法,我可以得到一个在目录中? 问题答案: 您可以像这样获取资产中的资源: 在您提供的 应该是资产的相对路径,同样你会提供给。 或者,您也可以这样创建: