[Java] Как определить, используется ли файл? - PullRequest
4 голосов
/ 20 мая 2009

Как определить, использует ли файл?

Ответы [ 5 ]

9 голосов
/ 20 мая 2009

В Java вы можете заблокировать файлы и проверять на общий доступ .

Вы можете использовать блокировку файла, чтобы ограничить доступ к файлу из нескольких процессы

public class Locking {
   public static void main(String arsg[])
       throws IOException {
     RandomAccessFile raf =
       new RandomAccessFile("junk.dat", "rw");
     FileChannel channel = raf.getChannel();
     FileLock lock = channel.lock();
     try {
       System.out.println("Got lock!!!");
       System.out.println("Press ENTER to continue");
       System.in.read(new byte[10]);
     } finally {
       lock.release();
     }
   }
}

Вы также можете проверить, существует ли блокировка, вызвав

// Try acquiring the lock without blocking. This method returns
// null or throws an exception if the file is already locked.
        try {
            lock = channel.tryLock();
        } catch (OverlappingFileLockException e) {
            // File is already locked in this thread or virtual machine
        }
0 голосов
/ 20 мая 2009

Вот простое решение для пользователей Windows: http://www.dr -hoiby.com / WhoLockMe /

Крошечный инструмент, но полезный ...

0 голосов
/ 20 мая 2009

Я думаю, что вы спрашиваете, заблокирован ли файл, который вы пытаетесь использовать. Вы можете использовать класс FileLock, чтобы попытаться заблокировать интересующий вас файл. Этот класс предназначен для сопоставления с собственным средством блокировки файлов в используемой файловой системе. Если вы можете заблокировать файл, можно с уверенностью предположить, что никакой другой процесс не блокирует файл.

0 голосов
/ 20 мая 2009

Я не думаю, что Java может сказать вам, использует ли другой процесс файл. В зависимости от того, что вы пытаетесь сделать, вы можете получить IOException при попытке манипулировать им. В противном случае, если вы не Linux, вы можете посмотреть на lsof .

0 голосов
/ 20 мая 2009

Этот вопрос касается C #, но я думаю, что он в основном относится и к Java

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