2011-12-20 9 views
3

ファイル "C:\ xxx.log"から "C:\ mklink \ xxx.log"にハードリンクを作成したいとします。 cmdでは、もちろん動作しますが、私はこのユースケース用のソフトウェアを書いています。Javaで "mklink/H"(ハードリンク)を実現するには?

  • だから、次に古いファイル

を削除ハードリンク

  • を作る次に、既存のファイル
  • を見つけるために持っている私は、私はちょうどファイルを作成する方法を知って、実装し始めたけど。 Googleで私はJavaのmklink \ Hについて何も見つかりませんでした。

    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

    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、あなたはハードリンクを作成し、JAVAを通してそれを呼び出すためにC++を使用することができます。

    希望します。

    +0

    ありがとう、@ジェームス。非常に良い答え。 – AlexR

    1

    リンク(ソフトまたはハード)は、標準のJava APIに公開されていないOS機能です。私はRunitme.exec()またはProcessBuilderを使ってjavaからコマンドmklink /hを実行することをお勧めします。

    または、これをラップするサードパーティのAPIを探してみてください。また、Java 7の新機能を確認してください。残念ながら、私はそれに精通していませんが、リッチファイルシステムAPIを追加したことを知っています。

    +0

    thx私は文字列を取得し、yuhuuを動作させるメソッドを書いた: –

    +0

    はこのように見える:m.runScriptLocal( "cmd/c mklink c:\\ mklink \\ test \\ test.txt c:\\ mklink \\ test.txt "); –

    0

    私は、後で、* nix/OSXまたはWindowsにリンクを作成するために次の方法を使用します。ウィンドウ上でmklink /jは、シンボリックリンクに似ているような "junction"を作成します。

    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); 
        } 
    } 
    
    関連する問題