我搜索了类似的信息,找不到明确的解决方案。所以我在这里询问。 我喜欢从我的本机代码中读取文本文件。 我有两种方法。 (1)第一个文件路径在Java中获取并传递给本机代码
In Java
File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
String att = "attr.names";
String tree = "face.tree";
File mAttClass = new File(cascadeDir, att);
File mTree = new File(cascadeDir, tree);
mNativeDetector.CreateNativeObject_Tree(mAttClass.getAbsolutePath(), mTree.getAbsolutePath());
mAttClass.delete();
mTree.delete();
In Native C
void GetNames(char *Fn)
/* --------- */
{
LOGD("Enter getnames \n");
FILE *Nf, *fopen();
char Buffer[1000];
DiscrValue v;
int AttCeiling=100, ClassCeiling=100, ValCeiling;
/* Open names file */
if ( ! ( Nf = fopen(Fn, "r") ) )
Error(0, Fn, "");
}
此方法将错误设为“无法从/data/data/com.test.pck/app_cascade/attr.names打开文件”。
(2)第二种方法是,文件(attr.names)与JNI文件夹中的源文件位于同一文件夹中。然后使用
加载if ( ! ( Nf = fopen(Fn, "r") ) )
Error(0, Fn, "");
错误是“无法从attr.names打开文件”。
如何从我的本机C代码中读取该文本文件。
编辑1: 正如下面的讨论。我需要使用openRawResources()来获取文件描述符,偏移量和大小。 我试着按照以下方式实施。
int rID = resources.getIdentifier("com.test.pkg:raw/"+attr.names, null, null);
InputStream is = resources.openRawResource(rID);
File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
String temp;
File mCascadeFile = null;
temp = xmlarray[l] + ".xml";
mCascadeFile = new File(cascadeDir, temp);
FileOutputStream 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();
现在可行。
由于