Java 如何使用android在本机(.cpp文件)中加载xml文件

Java 如何使用android在本机(.cpp文件)中加载xml文件,java,android,c++,xml,Java,Android,C++,Xml,我试图在native.cpp文件中加载xml文件。我将文件路径从java传递到cpp,无法加载文件路径 InputStream is = getResources().openRawResource(R.raw.lbpcascade_frontalface); File cascadeDir = getDir("cascade", Context.MODE_PRIVATE); mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.

我试图在native.cpp文件中加载xml文件。我将文件路径从java传递到cpp,无法加载文件路径

InputStream is = getResources().openRawResource(R.raw.lbpcascade_frontalface);
File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml");
String path = mCascadeFile.toString();
Log.i("TAG", mCascadeFile.getAbsolutePath().toString());
FaceDetector.sample(m, 1,path); //native call 
在my.cpp文件中包含

FaceDetector::FaceDetector(std::string stdFileName)
{
    cv::CascadeClassifier face_cascade;

    const char* x = stdFileName.c_str();
    face_cascade.load(x);
    LOGD("String value %s",x);

    if (!face_cascade.empty())
    {
        LOGD("Xml loaded Successfully");
    }
    else 
    {
        LOGD("XML not LOADED");
    }
}
无法加载Xml。

x是否指向有效(绝对)路径?
InputStream is = getResources().openRawResource(R.raw.lbpcascade_frontalface);
File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml");
String path = mCascadeFile.toString();
Log.i("TAG", mCascadeFile.getAbsolutePath().toString());
FaceDetector.sample(m, 1,path); //native call 

文件x指向有效的xml吗?

我找到了解决方案,为什么不加载xml。我在android.mk文件中犯了一个错误。我没有包括opencv最新版本3.0.0

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
#OPENCV_LIB_TYPE:=SHARED
OPENCV_INSTALL_MODULES:=on
include /Documents/adt-bundle-mac-x86_64-20140702/OpenCV-3.0.0-android-sdk/sdk/native/jni/OpenCV.mk
LOCAL_MODULE    := FaceDetectorFile
LOCAL_SRC_FILES := FaceDetector_wrap.cpp FaceDetector.cpp Main.cpp
LOCAL_LDLIBS     += -llog -ldl

include $(BUILD_SHARED_LIBRARY)

当路径的内容变为空时,有时无法加载xml

 InputStream is = getResources().openRawResource(R.raw.haarcascade_frontalface_alt);
FileOutputStream os = null;
        try {
            os = new FileOutputStream(mCascadeFile);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

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

在加载xml之前进行检查

我从stdFileName获取字符串路径,因为我给const char*x分配了一个值。stdFileName变得类似于data/data/app_cascade/lbpcascade_frontaface.xml您可以从java正常打开文件(具有读取外部存储权限)吗?如果是,我猜格式是无效的。谢谢你的回答,我无法理解你的问题。你能解释清楚吗。通常我们可以从java中读取文件,在Manifest.xml中具有读取存储权限