2012-02-06 19 views
11

Używam FileWriter do zapisu w pliku i zauważyłem, że nawet po usunięciu pliku (poza procesem) FileWriter nie rzuca żadnego wyjątku.Pisanie Java do usuniętego pliku

Czy to normalne?

+2

Jaki system operacyjny jest na to? Na przykład, w Linuksie zrobienie 'rm' powoduje tylko odłączenie pliku od ścieżki i dopiero wtedy, gdy znikną wszystkie uchwyty do pliku, zostanie ono faktycznie usunięte (może ono zostać odzyskane, jeśli jest nadal otwarte). –

Odpowiedz

15

To zależy od używanego systemu operacyjnego:

  • W Windowsie, że zwykle nie można usunąć otwartego pliku.
  • W systemie Unix usuwanie otwartego pliku i dalsze zapisywanie w nim (lub czytanie z niego) jest całkowicie dopuszczalne. Po usunięciu pliku nie będzie już on mieć pozycji katalogu. Jednak jego zawartość będzie nadal istnieć na dysku, dopóki plik nie zostanie zamknięty. Gdy wszystkie otwarte uchwyty odnoszące się do pliku zostaną zamknięte, system operacyjny automatycznie odzyska miejsce na dysku.
1

Tak, to normalne. Korzystając z większości konwencjonalnych sposobów wykonywania operacji we/wy, jeśli plik nie istnieje, tworzy go za Ciebie. To oczywiście w oczekiwaniu na usunięcie go przed zacząłeś pisać do niego.

0

Plik może być wyświetlany w więcej niż jednym miejscu (z twardymi linkami) Usunięcie pliku powoduje usunięcie jednego z twardych linków (prawdopodobnie jedynego) Jeśli istnieje łącze w innym miejscu, plik jest nadal dostępny.

Pliki, które są usuwane, ale otwarte, zajmują więcej miejsca na dysku, a jeśli są wystarczająco duże, mogą oznaczać, że używane jest miejsce, a rozmiar wszystkich plików znajdujących się na dysku jest inny.

BTW: można odczytywać/zapisywać zawartość otwartego pliku (usunięte lub nie), jeśli spojrzeć w /proc/{pid}/fd/{fid}

Powiązane problemy