Eksplorator plików, mutowalna ścieżka

Eksplorator plików, mutowalna ścieżka
SR
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 6 lat
  • Postów:17
0

W zasadzie to jest cały problem. Robie eksplorator plików i potrzebuje jakiegoś tymczasowego objektu File, który zawiera "teraźniejszą" (nie mam dużego zasobu słow) ścieżkę. Czyli jak jestem np w C:\folder, a potem przejde do C:\folder\foo to ten objekt musi sie zmienić. Niestety jak podaje oracle docs:

Instances of the File class are immutable

Ma ktoś może jakieś rozwiązanie?
PS
Z przejściem "w góre" nie jest jeszcze tak żle, bo istnieje funkcja .getParentFile()

edytowany 1x, ostatnio: stasiek_raczejava
nie100sowny
  • Rejestracja:około 9 lat
  • Ostatnio:około 15 godzin
  • Lokalizacja:Kraków
  • Postów:402
1

Zawsze możesz mieć zmienną typu immutable i jej przypisywać inną wartość. Jaki problem? Dlaczego musisz koniecznie zmieniać ten File?

Zrób sobie:

Kopiuj
File currentDirectory = new File(...)

currentDirectory = goToParent()
currentDirectory = goToChild("foo")

"Gdy się nie wie, co się robi, to się dzieją takie rzeczy, że się nie wie, co się dzieje"
edytowany 1x, ostatnio: nie100sowny
SR
Troche nie rozumiem, nie ma takiej metody jak goToChil()
nie100sowny
Musisz napisać. Metoda powinna zwracać nowo stworzony File do ścieżki dziecka. Nie musisz modyfikować obecnej wystarczy, że stworzysz nową i przypiszesz.
TI
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 3 lata
  • Postów:66
0

Zamiast zmieniać obiekt pamiętany w zmiennej, przypisz do tej zmiennej inny obiekt.
Przykład podglądowy dla Stringa, który również jest immutable:

Kopiuj
String s;
s = "C:/foo";
s = s + "/bar";
Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:9 dni
  • Lokalizacja:Stacktrace
  • Postów:6822
2

@stasiek_raczejava: nie używaj File. Do obsługi ścieżek służy klasa Path.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.