Czy dotyczy to pliku ogólnego, czy próbujesz uzyskać katalog nadrzędny pliku źródłowego? Jeśli to drugie, nie jestem pewien, czy rozumiesz kompilację Java. W czasie wykonywania test.javaprawdopodobnie nawet nie będzie istnieć na komputerze, na którym program jest uruchamiany. To skompilowany .classplik, który jest uruchamiany. Więc to zadziała tylko wtedy, gdy wiesz, gdzie się dddznajduje, w takim przypadku nie ma sensu szukać go programowo; po prostu mocno go zakoduj.
Mark Peters,
Odpowiedzi:
141
Stosowanie File„s getParentFile()metody i String.lastIndexOf()odzyskać tylko natychmiastowe katalogu nadrzędnego.
Komentarz Marka jest lepszym rozwiązaniem niż lastIndexOf():
file.getParentFile().getName();
Te rozwiązania działają tylko wtedy, gdy plik ma plik nadrzędny (np. Utworzony za pomocą jednego z konstruktorów plików biorących udział w programie File). Kiedy getParentFile()jest null, musisz skorzystać z lastIndexOflub użyć czegoś takiego jak Apache Commons 'FileNameUtils.getFullPath() :
Istnieje kilka wariantów zachowania / usunięcia przedrostka i separatora końcowego. Możesz użyć tej samej FilenameUtilsklasy, aby pobrać nazwę z wyniku, użyć lastIndexOfitp.
Powoduje to zgłoszenie wyjątku ArrayOutOfBoundsException, jeśli jesteś już w lokalizacji głównej - „/” -
Jnmgr
2
File file =newFile("C:/aaa/bbb/ccc/ddd/test.java");File curentPath =newFile(file.getParent());//get current path "C:/aaa/bbb/ccc/ddd/"String currentFolder= currentPath.getName().toString();//get name of file to string "ddd"
jeśli chcesz dołączyć folder „ddd” inną ścieżką, użyj;
test.java
prawdopodobnie nawet nie będzie istnieć na komputerze, na którym program jest uruchamiany. To skompilowany.class
plik, który jest uruchamiany. Więc to zadziała tylko wtedy, gdy wiesz, gdzie sięddd
znajduje, w takim przypadku nie ma sensu szukać go programowo; po prostu mocno go zakoduj.Odpowiedzi:
Stosowanie
File
„sgetParentFile()
metody iString.lastIndexOf()
odzyskać tylko natychmiastowe katalogu nadrzędnego.Komentarz Marka jest lepszym rozwiązaniem niż
lastIndexOf()
:Te rozwiązania działają tylko wtedy, gdy plik ma plik nadrzędny (np. Utworzony za pomocą jednego z konstruktorów plików biorących udział w programie
File
). KiedygetParentFile()
jest null, musisz skorzystać zlastIndexOf
lub użyć czegoś takiego jak Apache Commons 'FileNameUtils.getFullPath()
:Istnieje kilka wariantów zachowania / usunięcia przedrostka i separatora końcowego. Możesz użyć tej samej
FilenameUtils
klasy, aby pobrać nazwę z wyniku, użyćlastIndexOf
itp.źródło
lastIndexOf
, po prostu użyjfile.getParentFile().getName()
.null
(jeśli utworzyłeśFile
instancję ze ścieżką względną) - spróbujfile.getAbsoluteFile().getParentFile().getName()
.f.getParentFile()
może mieć wartość null, więc powinieneś to sprawdzić.źródło
Użyj poniżej,
źródło
W Javie 7 masz nowe API Paths . Nowoczesne i najczystsze rozwiązanie to:
Wynik byłby taki:
źródło
Jeśli masz tylko ścieżkę String i nie chcesz tworzyć nowego obiektu File, możesz użyć czegoś takiego:
źródło
jeśli chcesz dołączyć folder „ddd” inną ścieżką, użyj;
źródło
Z java 7 wolałbym używać Path. Musisz tylko wprowadzić ścieżkę do:
i utwórz metodę get:
źródło
W Groovy:
Nie ma potrzeby tworzenia
File
instancji, aby przeanalizować ciąg w groovy. Można to zrobić w następujący sposób:Podział utworzy tablicę,
[C:, aaa, bbb, ccc, ddd, test.java]
a indeks-2
wskaże wpis przed ostatnim, którym w tym przypadku jestddd
źródło
źródło