Pracuję nad projektem i jednym z wymagań jest, jeśli drugi argument dla głównej metody zaczyna się od "/" (dla systemu Linux) powinien traktować go jako bezwzględną ścieżkę (nie problem) , ale jeśli nie zaczyna się od "/", powinien pobrać bieżącą ścieżkę roboczą klasy i dołączyć do niej dany argument.Uzyskiwanie aktualnej nazwy klasy, w tym pakietu
mogę uzyskać nazwę klasy na kilka sposobów: System.getProperty("java.class.path")
, new File(".")
i getCanonicalPath()
, i tak dalej ..
Problemem jest to tylko daje mi katalog, w którym przechowywane są pakiety - czyli jeśli mam klasa zapisana w ".../project/this/is/package/name", dałaby mi tylko "/ project /" i ignoruje nazwę pakietu, w którym znajdują się rzeczywiste pliki .class.
Wszelkie sugestie?
EDIT: Oto wyjaśnienie, wzięte z opisu ćwiczeń
SourceDir może być absolutny (zaczynające się od „/”) lub w stosunku do miejsca, gdzie możemy uruchomić program z
SourceDir jest argumentem dla głównej metody. jak mogę znaleźć tę ścieżkę?
Co zrobisz, jeśli kod jest spakowany w JAR (lub w inny sposób nie jest w strukturze folderów/plików, jak zakładasz)? To niebezpieczne założenie; może to zadziałać dobrze w przypadku małego eksperymentu, przydziału klasowego lub innej sytuacji jednorazowej, ale PROSZĘ nie wdawać się w zwyczaj przyjmowania tego założenia w odniesieniu do kodu jakości produkcji. –
Nie ma sensu znajdowanie ścieżki do pliku klasy.Również opis ćwiczenia nie wspomina o tym, że jeśli przeczytasz go uważnie (* gdzie uruchomimy program z * oznacza bieżącą ścieżkę, z której program jest wywoływany przez użytkownika). –
Może mógłbyś mi pomóc lepiej zrozumieć ten wymóg? Muszę sprawdzić, czy argument zaczyna się od "/" (wzmianka w opisie). jeśli tak, po prostu użyj go jako absolutnego. jak jest. ale jeśli nie, jak mam to potraktować? –