【发布时间】:2011-02-15 17:13:51
【问题描述】:
我正在编写一个程序,它使用 scp 在更大的 java 程序中复制文件。就目前而言,程序在 scp 复制文件时冻结,这可能需要几分钟,所以我希望能够显示 scp 的进度,或者至少获得带有scp进度显示!有什么建议吗?
【问题讨论】:
标签: java progress-bar scp
我正在编写一个程序,它使用 scp 在更大的 java 程序中复制文件。就目前而言,程序在 scp 复制文件时冻结,这可能需要几分钟,所以我希望能够显示 scp 的进度,或者至少获得带有scp进度显示!有什么建议吗?
【问题讨论】:
标签: java progress-bar scp
scp 写入 STDOUT 并刷新输出。如果您通过管道输出,您可能能够从管道读取输出,但我的猜测是 1)scp 不会将进度条打印到管道或 2)如果您可以执行 1,则输出只有在以下情况下才有意义你在 java 窗口中重新实现了一个 pty 或类似的东西。
但是,您可以尝试使用类似期望的模块调用 scp 并模仿终端的工作方式,并且您可以伪造 scp 使其认为它是作为终端运行的。
最后,(这可能是最好的答案),不要使用 scp,找到一个要导入的 java 库,它直接链接到 openssh 的协议,用于使用 scp 传输文件。
【讨论】:
当您说“程序冻结”时,我的猜测是您的意思是 Swing UI 冻结。如果是这样,请在后台线程中启动 scp 并向用户显示一个不确定的进度条。
【讨论】:
使用 SwingWorker 调用“launch scp”以获取主线程并让 GUI 再次更新。
要获得实际进展,您需要调查 scp 打印的字符。我相信它维护一个 ASCII 进度条,然后您可以在 Java 中复制。您可能需要在 scp 中添加“-v”以使其更健谈。
【讨论】: