小编Mar*_*cus的帖子

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

使用 rJava 进行调用时,有没有办法以 R 中的字符向量捕获 java 写入控制台/标准输出的输出?有没有办法做到这一点,而不将java的stdout重定向到文件并让R读取文件?

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

当我进行运行 java 代码的函数调用时,任何控制台输出都会转发到 RStudio 控制台,但capture.output似乎不起作用(我type = "output"也尝试过)

rJava::.jinit()

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

identical(jText, character(0))
#> [1] TRUE
Run Code Online (Sandbox Code Playgroud)

我可以通过将 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 …
Run Code Online (Sandbox Code Playgroud)

r rjava rjdbc

5
推荐指数
0
解决办法
123
查看次数

标签 统计

r ×1

rjava ×1

rjdbc ×1