以编程方式执行解压缩命令

Executing unzip command programmatically

我创建了一个 shell 脚本,里面有一个简单的语句 unzip -o 并在 运行 上通过终端传递一个 .zip 文件作为参数,它工作正常并接受5 第二个创建解压缩 folder.Now 我正在尝试在 Scala 中做同样的事情,我的代码如下:

object ZipExt extends App {

  val process = Runtime.getRuntime.exec(Array[String]("/home/administrator/test.sh", "/home/administrator/MyZipFile_0.8.6.3.zip"))
  process.waitFor

  println("done")
}

现在,每当我尝试执行 ZipExt 时,它都会永远卡在 process.waitFor 中,并且 print 语句不是 reached.I 已尝试在本地和服务器上使用此代码。我尝试了其他可能性,比如在 shell 脚本中创建局部变量,包括 shell 脚本中的退出语句,试图解压缩除我的以外的其他 .zip,甚至有时 print 语句是执行但没有解压缩文件在那里创建。所以我很确定以编程方式执行 unzip 命令来解压缩文件有问题,或者有其他方法可以解压缩压缩文件 programtically.I 已经被这个问题困扰了 2 天,所以请有人帮忙..

您提供给我们的信息似乎不足以重现问题:

% mkdir 34088099
% cd 34088099 
% mkdir junk
% touch junk/a junk/b junk/c
% zip -r junk.zip junk
updating: junk/ (stored 0%)
  adding: junk/a (stored 0%)
  adding: junk/b (stored 0%)
  adding: junk/c (stored 0%)
% rm -r junk
% echo 'unzip -o ' > test.sh
% chmod +x test.sh
% scala
Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_66).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val process = Runtime.getRuntime.exec(Array[String]("./test.sh", "junk.zip"))
process: Process = java.lang.UNIXProcess@35432107

scala> process.waitFor
res0: Int = 0

scala> :quit
% ls junk 
a  b  c

我建议在您自己的机器上尝试同样的复制。如果你也成功了,那就开始系统地减少成功案例和失败案例之间的差异,一次一个步骤。这将有助于缩小可能的原因范围。