Eksplorator plików, mutowalna ścieżka

Odpowiedz Nowy wątek
2018-12-29 18:50
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, 2018-12-29 18:50

Pozostało 580 znaków

2018-12-29 19:49

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

Zrób sobie:

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, 2018-12-29 19:51
Troche nie rozumiem, nie ma takiej metody jak goToChil() - stasiek_raczejava 2018-12-29 20:03
Musisz napisać. Metoda powinna zwracać nowo stworzony File do ścieżki dziecka. Nie musisz modyfikować obecnej wystarczy, że stworzysz nową i przypiszesz. - nie100sowny 2018-12-29 22:48

Pozostało 580 znaków

2018-12-30 22:44
Tig
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:

String s;
s = "C:/foo";
s = s + "/bar";

Pozostało 580 znaków

2019-01-01 16:22
2

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0