2012-05-21 2 views
0

Если я создаю объект Java Random Random File File для файла. Что происходит, когда файл переименовывается?Java RAF - что, если файл переименован

кейс1. Скажем, я создал объект RAF для test.log. Тогда я переименовал TEST.LOG -> test1.log, делая что-то вроде

mv test.log test1.log 

Что происходит с моим объектом RAF, то в этом случае?

кейс2. опять же, создать объект RAF против test.log тогда:

mv test.log test1.log 
touch test.log 

в этом случае, мой объект, указывающий на TEST.LOG или test1.log

Вопрос 3. что, если мой объект RAF указывает на файл журнала, который в конечном итоге будет повернут?

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

+2

Почему вы не испытываете это самостоятельно в своей среде? – BalusC

+0

Извините, я должен был сказать это, я больше ищу объяснение, как именно объект RAF указывает на файл, и как этот указатель получает влияние, когда файл переименован и удален. – Shengjie

+0

Существует не один. Это зависит от операционной системы. Вы не можете переименовать открытый файл в Windows; вы можете на некоторых других системах, например. Я считаю, что Linux и Unix - но я открыт для исправления. Это не волшебство в отношении объекта RAF, указывающего на файл. Это открытый файл, период. – EJP

ответ

0

===========================

Мой собственный тест

======== ===================

RandomAccessFile rand = new RandomAccessFile("/tmp/test_log", "rw"); 
    System.out.print("file created"); //======lineA====== 
    while (true) { 
     Thread.sleep(8000); 
     System.out.print("finish sleeping"); 
     int i = (int) rand.length(); //=====lineB===== 
     rand.seek(0); // Seek to start point of file 
     for (int ct = 0; ct < i; ct++) { 
      byte b = rand.readByte(); // read byte from the file 
      System.out.print((char) b); // convert byte into char 
     } 
    } 

тест 1:

удалить test_log файл после Linea перед тем lineB, он заканчивает чтение всего файла без любые проблемы/исключения.

тест 2:

мв/TMP/test_log /tmp/test_log.bk после Linea перед тем lineB, опять же, заканчивает читать весь файл без каких-либо проблем/исключений.

тест 3:

следующий тест 2, начать писать дополнительные строки в/TMP/test_log.Б.К.,

echo "test line1 bla bla" >> /tmp/test_log.bk 
echo "test line2 bla bla" >> /tmp/test_log.bk 

читает весь файл сейчас проблема, плюс, он читает новые линии добавлены в test_log.bk, а также.

4

Я сделал небольшой тест:

  • Created случайный доступ к файлам, и выскочил на joption панель.
  • Пока диалог был открыт, я удалил файл, который был полностью разрешен.
  • Затем попытался написать на файл и закрыть его, что произошло тихо.

По крайней мере, на моей машине Linux это ведет себя так.

Когда я попытался переместить файл, содержимое было написано неважно.

Для случая 2 содержимое будет записано в «test1.log», на которое вы указываете.

Для 3d-футляра нет, файл в конечном итоге не будет повернут.

Извините за предыдущие дикие предположения.

+0

Действительно? как насчет случая 3 Я только что добавил? – Shengjie

+0

Я также редактировал, чтобы развернуть объяснение, но в основном вы не сможете перемещать файл, когда программа его использует. –

+0

Я сделал небольшой тест и отредактировал его. –

Смежные вопросы