Java - разрешить доступ к файлам во время ввода/вывода

Есть ли способ разрешить доступ к файлам, пока они используются в Java?

BufferedWriter bw = new BufferedWriter(new FileWriter(file));
BufferedReader br = new BufferedReader(new FileReader(file));
String data = "";
String line;
while((line = br.readLine()) != null)
{
    data += line;
}
bw.write(data + msg);
br.close();
bw.close();

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

Спасибо!

Чтобы уточнить: мне нужны внешние программы, чтобы иметь доступ к файлу, пока Java записывает его. Я НЕ хочу использовать приведенный выше код каждый раз, когда мне нужно добавить строку в файл. Я хочу открыть средство записи файлов с самого начала и добавлять, когда мне нужно (но, как я уже сказал, мне нужно разрешить доступ внешним программам, так что это не сработает!).


person guywhoneedsahand    schedule 12.07.2011    source источник
comment
Чем бы вы хотели заниматься?   -  person Thorbjørn Ravn Andersen    schedule 12.07.2011
comment
Есть ли способ разрешить доступ к файлам, пока они используются в Java?   -  person guywhoneedsahand    schedule 12.07.2011
comment
Вы можете попробовать использовать Selector в библиотеке NIO. stackoverflow.com/ вопросы/906433/   -  person RetroCoder    schedule 12.07.2011
comment
@Marc Noon - разбираюсь, спасибо РЕДАКТИРОВАТЬ: Хм, выглядит сложно. Неужели нет более простых решений?   -  person guywhoneedsahand    schedule 12.07.2011
comment
@Marc Noon FileChannels не являются SelectableChannels. Селекторы не могут решить эту проблему. Ссылка, которую вы разместили, тоже не актуальна.   -  person user207421    schedule 12.07.2011


Ответы (2)


Поскольку вы находитесь под Windows, решения нет. Это Windows блокирует одновременный доступ к файлу, а не Java.

person user207421    schedule 12.07.2011
comment
Хорошо, это очень плохо. В любом случае спасибо. - person guywhoneedsahand; 13.07.2011

В концепции java.nio вы можете неблокировать доступ к файлам.

person stemm    schedule 12.07.2011
comment
Я огляделся, и это похоже на путь. У вас случайно нет учебников/фрагментов кода для файлового ввода/вывода? - person guywhoneedsahand; 12.07.2011
comment
Нет, ты не такой. В Java нет такой вещи, как неблокирующий доступ к файлам. @guywhoneedsaand игнорируйте это. - person user207421; 12.07.2011
comment
И даже если бы он был, это не помогло бы вам с замком. Неблокирующий означает, что он не будет блокировать поток, если нет данных, доступных немедленно, он не обходит блокировки. - person Peter Lawrey; 12.07.2011
comment
@guywhoneedsahand linuxtopia.org/online_books/programming_books/thinking_in_java/ — в этой статье объясняет, как заблокировать некоторые части вашего файла, в то время как другая часть файла по-прежнему доступна для других процессов (других JVM или собственных процессов). Но, как я понял - блокировка зависит от ОС. - person stemm; 12.07.2011