2012-11-08 9 views
6

Dato un percorso come /a/./b/c/../d, vorrei rimuovere tutti gli indicatori "directory corrente" (cioè, punto) e "directory principale" indicatori (cioè, ..), dando a/b/d.Risolvi il nome di un percorso con ... identificatori di directory parent ("punto punto") senza risolvere i collegamenti simbolici

potrei usare File.getCanonicalPath(), ma che risolve anche i collegamenti simbolici, che non voglio.

Qualsiasi modo semplice? È più semplice che scrivere un tokenizer e gestirlo da solo.

Punti bonus se puoi dirmi quale sia il nome giusto per "." e '..' sono in questo contesto.

risposta

3

È possibile utilizzare FilenameUtils.normalize() nella libreria Apache Commons IO - see javadoc here.

"Punto" (.) è la directory corrente e "punto punto" (..) è la directory superiore - read up on unix directories.

+0

'getAbsolutePath' non risolve' .' or '..' - assicura solo che un percorso sia assoluto. I percorsi con '..' possono essere ancora assoluti, come nel mio esempio. – BeeOnRope

+0

Spiacente, ho letto erroneamente la tua domanda, vedi la mia modifica. – doublesharp

+0

Grazie. Per chiarire, so bene cosa sono ''. E '..'. quello che volevo dire era cosa chiamare le forme puntuali di questi in particolare, come nel titolo della mia domanda. – BeeOnRope

6

Guava ha anche questo come Files.simplifyPath(String). La soluzione migliore, tuttavia, (se è possibile utilizzare JDK7) è rappresentare il percorso come Path e utilizzare Path.normalize() per ottenere la versione normalizzata.

+0

Grazie. Questo è davvero molto utile per me dato che dipendiamo da guava ma non da commons-io attualmente. Non su Java 7, ma il collegamento è stato molto istruttivo. Non avevo pensato al caso di un /../ b dove a è un link simbolico. – BeeOnRope

Problemi correlati