Создание жесткой ссылки в Java - PullRequest
10 голосов
/ 23 апреля 2009

В настоящее время я использую команду ln через Runtime.exec(). Работает нормально. Единственная проблема заключается в том, что для этого форка нам нужно вдвое больше пространства кучи приложения. Мое приложение представляет собой 64-разрядное приложение с размером кучи около 10 гигабайт, и поэтому у него заканчивается пространство подкачки. Я не смог найти конфигурацию, которая могла бы это исправить.

Я также хочу не использовать JNI для того же. Также я где-то слышал, что это средство скоро будет предоставлено в Java 7.

Ответы [ 5 ]

10 голосов
/ 14 октября 2009

Возможно, этот сайт поможет: http://java.sun.com/docs/books/tutorial/essential/io/links.html

9 голосов
/ 10 декабря 2012

В Java 7 это просто, используя createLink :

Files.createLink(Paths.get("newlink"), Paths.get("existing"));
6 голосов
/ 23 апреля 2009

вы можете попробовать JNA вместо JNI (JNA имеет некоторые явные преимущества перед JNI); да, отметьте JSR 203

4 голосов
/ 11 июня 2010

С JNA это очень просто:

public interface CLibrary extends Library {
    CLibrary INSTANCE = (CLibrary)
        Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),
                           CLibrary.class);
    int link(String fromFile, String toFile);
}

public static void main(String[] args) {
    CLibrary.INSTANCE.link(args[0], args[1]);
}

Скомпилируйте и запустите!

0 голосов
/ 23 апреля 2009

Вы могли бы использовать Windows вместо UNIX? ;) Я полагаю, что JDK7 будет использовать вызов, аналогичный CreateProcess, вместо fork, где он доступен.

Более практичным решением было бы создание нового дочернего процесса вскоре после запуска. Если вы используете кучу 10g, другой небольшой процесс Java, вероятно, не будет таким плохим. Получить этот процесс (с помощью потоков) для исполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...