这是我拥有的代码,它只返回第一行,我需要能够将所有行作为String处理。我怎么能把ResultSetFormatter.out(ps,results,query)的输出放到一个字符串数组中?
//convert sparql query results into string array
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
ResultSetFormatter.out(ps, results, query);
String queryOutput = new String(baos.toByteArray(), "UTF-8");
System.out.println(queryOutput);
答案 0 :(得分:1)
您提供的代码应输出整个results
对象作为ps
中的ascii表。如果您只看到一行,那么这是因为您的查询只返回一行,或者因为您需要刷新PrintStream
要验证您只获得一行,请包装结果并打印它们(伪代码):
final ResultSetRewindable r = ResultSetFactory.copyResults(results);
ResultSetFormatter.out(System.out, r, query);
r.reset();
ResultSetFormatter.out(ps, r, query); // Continue as you were
如果你应该获得多行(通过运行前面的代码观察到),请在将其转换为字符串之前添加一个刷新ps
的调用:
ps.flush();
String queryOutput = new String(baos.toByteArray(), "UTF-8");
请注意,ps
应该包含写入System.out
的所有内容,因此如果您在转换baos
时没有看到这些值,那么很可能ps
没有不会将这些值传输到基础流。 flush
会强制转移。
此外,您可能根本不需要ps
,因为ResultSetFormatter.out
只需要OutputStream
。例如,您可以直接写入baos
。