如何将rJava标准捕获为R字符向量?

时间:2019-07-19 17:21:12

标签: r rjava rjdbc

使用rJava进行调用时,是否有办法在R中的字符向量中捕获Java写到控制台/ stdout的输出?有没有一种方法可以将Java的stdout重定向到文件并让R读取文件?

在我的特定用例中,我正在使用RJDBC连接到数据库,服务器将发送回有用的信息,并将其打印到控制台。我想解析这些消息,提取一些信息,并采取相应的措施。

当我执行运行Java代码的函数调用时,任何控制台输出都会中继到RStudio控制台,但是capture.output似乎不起作用(我也尝试过type = "output")< / p>

rJava::.jinit()

jText <- capture.output(
  rJava::J("java/lang/System")$out$println("Write this down"), 
  type = "message"
)

identical(jText, character(0))
#> [1] TRUE

我可以通过将java stdout重定向到文件来做到这一点,但是有什么方法可以避免写入文件?例如,我可以提取以这种方式与HAL 9000交谈的人:

rJava::.jinit()
jSys <- rJava::J("java/lang/System")

jOut <- tempfile(fileext = ".txt")
jOrigOut <- jSys$out
jPS <- rJava::.jnew("java/io/PrintStream", jOut)

jSys$setOut(jPS)
jSys$out$println("I'm sorry Dave. I'm afraid I can't do that")
jSys$setOut(jOrigOut)

msg <- readLines(jOut)
regmatches(msg, regexpr("(?<=I'm sorry ).*(?=\\.)", msg, perl = TRUE))
#> [1] "Dave"

reprex package(v0.3.0)于2019-07-19创建

但是有办法避免使用临时文件吗?

0 个答案:

没有答案