使用java的linux命令

时间:2014-12-24 07:39:07

标签: java linux

我想使用tar代码将所有java文件从目录移动到另一个目录,而我的java代码在linux计算机上运行。

我尝试了下面的代码但没有发生任何事情 -

try {
      String command = "mv " + "/home/" + name + "/*.tar"+ " "+ "/home/Program/MovedTar/"+ name + "/" + "";

      Process proc = Runtime.getRuntime().exec(command);
      int waitFor = proc.waitFor();

      closeStdStream(proc);
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

5 个答案:

答案 0 :(得分:2)

用于文件处理的跨平台解决方案。

Path source = Paths.get("/my/full/path");
Path target = Paths.get("/new/path")
try {
    Files.move(source, target,
    StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
    e.printStackTrace();
}

我在这里使用了java.nio.fileCopyOption是来自java.nio.file的界面。 StandardCopyOption枚举有3个复制选项:

  • ATOMIC_MOVE。将文件作为原子文件系统操作移动。
  • COPY_ATTRIBUTES。将属性复制到新文件。
  • REPLACE_EXISTING。替换现有文件(如果存在)。

答案 1 :(得分:2)

首先获取目录中的文件列表。

然后使用for循环并检查tar个文件。

然后使用mv命令移动该文件。

答案 2 :(得分:0)

您可以使用Apache common-exec库。

这是网站上的一个例子

  CommandLine cmdLine = new CommandLine("AcroRd32.exe");
    cmdLine.addArgument("/p");
    cmdLine.addArgument("/h");
    cmdLine.addArgument("${file}");
    HashMap map = new HashMap();
    map.put("file", new File("invoice.pdf"));
    commandLine.setSubstitutionMap(map);

    DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();

    ExecuteWatchdog watchdog = new ExecuteWatchdog(60*1000);
    Executor executor = new DefaultExecutor();
    executor.setExitValue(1);
    executor.setWatchdog(watchdog);
    executor.execute(cmdLine, resultHandler);

    // some time later the result handler callback was invoked so we
    // can safely request the exit value
    int exitValue = resultHandler.waitFor()

答案 3 :(得分:0)

如果您使用的是jdk-7或更高版本,则可以使用ProcessBuilder.Redirect -

commandString = "...";
ProcessBuilder pb = new ProcessBuilder(commandString);
pb.redirectOutput(Redirect.INHERIT);
Process p = pb.start();  

ProcessBuilder的选项多于Runtime.exec

答案 4 :(得分:0)

我找到了这个链接。我没试过。

https://docs.oracle.com/javase/tutorial/essential/io/move.html

移动文件或目录

您可以使用move(Path,Path,CopyOption ...)方法移动文件或目录。如果目标文件存在,则移动失败,除非指定了REPLACE_EXISTING选项。

可以移动空目录。如果目录不为空,则在不移动该目录内容的情况下移动目录时允许移动。在UNIX系统上,移动同一分区中的目录通常包括重命名目录。在这种情况下,即使目录包含文件,此方法仍然有效。

此方法采用varargs参数 - 支持以下StandardCopyOption枚举:

REPLACE_EXISTING – Performs the move even when the target file already exists. If the target is a symbolic link, the symbolic link is replaced but what it points to is not affected.
ATOMIC_MOVE – Performs the move as an atomic file operation. If the file system does not support an atomic move, an exception is thrown. With an ATOMIC_MOVE you can move a file into a directory and be guaranteed that any process watching the directory accesses a complete file.

以下显示了如何使用移动方法:

import static java.nio.file.StandardCopyOption。*;

...

Files.move(source,target,REPLACE_EXISTING);

虽然您可以如图所示在单个目录上实现move方法,但该方法通常与文件树递归机制一起使用。有关更多信息,请参阅遍历文件树。