3

我想创建一个从文件 "C:\xxx.log" 到 "C:\mklink\xxx.log" 的硬链接。在 cmd 中它当然可以工作,但我想为这个用例编写一个软件。

  • 所以必须找到现有文件
  • 然后做一个硬链接
  • 然后删除旧文件

我开始实施,但我只知道如何创建文件。在谷歌上,我没有发现任何关于 mklink \H for Java 的信息。

public void createFile() {
     boolean flag = false;

     // create File object
     File stockFile = new File("c://mklink/test.txt");

     try {
         flag = stockFile.createNewFile();
     } catch (IOException ioe) {
          System.out.println("Error while Creating File in Java" + ioe);
     }

     System.out.println("stock file" + stockFile.getPath() + " created ");
}
4

3 回答 3

4

在 JAVA 中创建硬链接有 3 种方法。

  1. JAVA 1.7 支持硬链接。

    http://docs.oracle.com/javase/tutorial/essential/io/links.html#hardLink

  2. JNA,JNA 允许您进行本机系统调用。

    https://github.com/twall/jna

  3. JNI,您可以使用 C++ 创建硬链接,然后通过 JAVA 调用它。

希望这可以帮助。

于 2011-12-20T10:15:36.893 回答
1

链接(软或硬)是一种操作系统功能,不向标准 Java API 公开。我建议您使用或mklink /h从 java运行命令。Runitme.exec()ProcessBuilder

或者尝试找到包装它的 3rd 方 API。还要检查 Java 7 中的新功能。不幸的是,我不熟悉它,但我知道他们添加了丰富的文件系统 API。

于 2011-12-20T10:16:11.563 回答
1

对于后代,我使用以下方法在 *nix/OSX 或 Windows 上创建链接。在 Windows 上mklink /j创建一个类似于符号链接的“连接点”。

protected void makeLink(File existingFile, File linkFile) throws IOException {
    Process process;
    String unixLnPath = "/bin/ln";
    if (new File(unixLnPath).canExecute()) {
        process =
                Runtime.getRuntime().exec(
                        new String[] { unixLnPath, "-s", existingFile.getPath(), linkFile.getPath() });
    } else {
        process =
                Runtime.getRuntime().exec(
                        new String[] { "cmd", "/c", "mklink", "/j", linkFile.getPath(), existingFile.getPath() });
    }
    int errorCode;
    try {
        errorCode = process.waitFor();
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        throw new IOException("Link operation was interrupted", e);
    }
    if (errorCode != 0) {
        logAndThrow("Could not create symlink from " + linkFile + " to " + existingFile, null);
    }
}
于 2014-02-15T17:10:52.763 回答