gpt4 book ai didi

java - 在 Android Studio 中加载 Turtle 文件时出错

转载 作者:行者123 更新时间:2023-12-02 01:52:17 24 4
gpt4 key购买 nike

我正在尝试将 Turtle 文件加载到 Android studio 中,并使用 Androjena 库对 Turtle 文件运行查询。我可以在 Eclipse 中使用 JavaFX 毫无问题地执行此操作。但是,在 Intellij IDE 中,我遇到了 fatal error ,这显然使我的应用程序崩溃了。我有一个名为 runQuery() 的方法,调用该方法是为了在文件上运行查询:

public String runQuery(){
String stringQuery = "PREFIX foaf: <http://xmlns.com/foaf/0.1/> \n" +
"PREFIX dbo: <http://dbpedia.org/ontology/> \n" +
"SELECT ?birthDate WHERE { \n" +
"?barack foaf:name \"Barack Obama\"@en .\n" +
"?barack dbo:birthDate ?birthDate \n" +
"}";


String answer = "";
Model model = FileManager.get().loadModel("sample_pres.ttl", "TTL");

Query query = QueryFactory.create(stringQuery);
try {
QueryExecution qexec = QueryExecutionFactory.create(query, model);
ResultSet results = qexec.execSelect();
while(results.hasNext()) {
QuerySolution soln = results.nextSolution();
Literal answerLiteral = soln.getLiteral("birthDate");
answer = answerLiteral.toString();

}
}

catch(Exception ignore) {

}


this.answer = answer;
return answer;
}

给我带来问题的代码行是 FileManager.get().loadModel() 行。这是我收到的异常:

com.hp.hpl.jena.shared.NotFoundException: Not found: sample_pres.ttl

所以我发现 Android 找不到该文件,尽管该文件位于我的 Assets 文件夹中。我假设我不/不能使用 AssetManager,因为我没有尝试包含 FileInputStream。所以我在这一点上陷入了困境。这是我的项目结构的图片:

enter image description here

我在项目结构中的 app/src/main 下添加了 asset 文件夹。我对 Android Studio 比较陌生,我知道在 eclipse 中的 JavaFX 中我可以简单地使用文件的绝对路径来访问它,而且我知道这显然在 Android Studio 中不起作用。然而,我找不到从 Android 项目(我的 Assets 文件夹)中的本地源加载 Turtle 文件并执行查询的示例。该网站上的每个示例或问题似乎都与通过互联网连接从外部端点运行查询有关。所以这就是我感到困惑的部分原因。我不确定如何从 Android studio 中的本地源运行查询并从我的 Assets 文件夹引用 Turtle 文件以避免 com.hp.hpl.jena.shared.NotFoundException

最佳答案

我找到了答案。问题是android studio中的资源文件无法在android studio中读取。即使在使用 .ttl 文件并在turtle中读取它们时,它们也必须转换为 FileOutputStream。以下是代码示例:

 String filePath = context.getFilesDir() + File.separator + "my_turtle.ttl";
File destinationFile = new File(filePath);
FileOutputStream outputStream = new FileOutputStream(destinationFile);
AssetManager assetManager = context.getAssets();
InputStream inputStream = assetManager.open("sample_3.ttl");
byte[] buffer = new byte[1024];
int length = 0;
while((length = inputStream.read(buffer)) != -1){
outputStream.write(buffer,0,length);
}
inputStream.close();
outputStream.close();



Model model = null;

model = FileManager.get().loadModel(filePath,"TTL");

Query query = QueryFactory.create(stringQuery);

QueryExecution qexec = QueryExecutionFactory.create(query, model);
ResultSet results = qexec.execSelect();
while(results.hasNext()) {
QuerySolution soln = results.nextSolution();
Literal answerLiteral = soln.getLiteral("abstract");
answer = answerLiteral.toString();
System.out.println(answer);


}



if(!answer.equals("")){
this.answer = answer;
return answer;
}
else{
return "I could not find an answer";
}

关于java - 在 Android Studio 中加载 Turtle 文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52802063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com