1

我正在编写一个程序,它使用 scp 在更大的 java 程序中复制文件。就目前而言,程序在 scp 复制文件时冻结,这可能需要几分钟,所以我希望能够显示 scp 的进度,或者至少获得带有scp进度显示!有什么建议么?

4

3 回答 3

2

scp写入 STDOUT 并刷新输出。如果您通过管道输出,您可能能够从管道读取输出,但我的猜测是 1)scp 不会将进度条打印到管道或 2)如果您可以执行 1,则输出仅在以下情况下才有意义您在 java 窗口中重新实现 pty 或类似的。

但是,您可以尝试使用类似期望的模块调用 scp 并模拟终端的工作方式,并且您可以伪造 scp 使其认为它作为终端运行。

最后,(这可能是最好的答案),不要使用 scp,找到一个要导入的 java 库,它直接链接到 openssh 的协议,用于使用 scp 传输文件。

于 2010-05-05T00:16:58.537 回答
2

当您说“程序冻结”时,我的猜测是您的意思是 Swing UI 冻结了。如果是这样,在后台线程中启动 scp 并向用户显示一个不确定的进度条。

于 2010-05-05T01:30:10.410 回答
0

使用 SwingWorker 调用“launch scp”以获取主线程并让 GUI 再次更新。

要获得实际进展,您需要调查 scp 打印的字符。我相信它维护一个 ASCII 进度条,然后您可以在 Java 中复制。您可能需要在 scp 中添加“-v”以使其更健谈。

于 2010-05-05T08:02:07.827 回答