我想使用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();
}
答案 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.file
。 CopyOption
是来自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方法,但该方法通常与文件树递归机制一起使用。有关更多信息,请参阅遍历文件树。