2011-07-27 23 views
7

Kiedy używam FileUtils.copyDirectory(), bity wykonania zostają wyłączone dla plików wykonywalnych.
Czy muszę włączyć je ręcznie?Jak zachować uprawnienia do plików podczas korzystania z FileUtils.copyDirectory?

FWIW, moja emulacja jest ustawiona na 0027, ale wygląda na to, że FileUtils.copyDirectory() nie używa tego ustawienia, ponieważ "inne" uprawnienia, oprócz bitu wykonania, są zachowywane.

+0

Jakiego systemu operacyjnego używasz? Nie zdziwiłbym się, gdyby zachowanie różniło się między Linuksem, FreeBSD i Mac OS X ... – gutch

+0

Jestem na Linuksie. Ponieważ mam obejście problemu, poczekam do momentu przyjęcia wersji Java 7 w mojej firmie. –

Odpowiedz

3

Nie sądzę, że jest to możliwe z powodu ograniczeń maszyny JVM. Aplikacja IO api i zachowanie są haniebne dla najpopularniejszego języka/platformy na świecie.

Jeśli spojrzeć na kod źródłowy fileutils, podczas kopiowania tworzy nowy plik jak ten

File copiedFile = new File(destDir, srcFile.getName()); 

uprawnienia do pliku nie są zachowywane. Podczas faktycznej kopii bajty są kopiowane partiami (buforowane) i zapisywane do nowego pliku.

ale możesz poczekać kilka dni lub użyć wersji demonstracyjnej JDK7, która ma apis, aby było to możliwe.

5

Przydadzą się dodatki do systemu plików w Javie 7. Spójrz na JSR-203. Jeśli korzystasz z systemu Linux, możesz użyć interfejsu backport z językiem Java 6.

Nowy interfejs API, który ma być: Files.copy(Path, Path, CopyOptions). Zauważ, że CopyOptions ma COPY_ATTRIBUTES, co zrobi, co chcesz.

Powiązane problemy