2011-09-01 12 views
10

Sto tentando di creare un oggetto File Java in base a un nome file fornito dall'utente (potrebbe essere assoluto o relativo) e una directory di base dipendente dall'ambiente. Il doc java per java.io.File (genitore File, String bambino) dice il seguente:java.io.File (genitore, figlio) non funziona come previsto

Se la stringa bambino percorso è assoluto allora viene convertito in un percorso relativo in un modo dipendente dal sistema.

che mi fece pensare che se ho il seguente codice:

public class TestClass { 
    public static void main(String[] args) throws IOException { 
     File file = new File(new File("C:/Temp"),"C:/Temp/file.txt"); 
     System.out.println(file.getAbsolutePath()); 
    } 
} 

l'uscita sarebbe

C:\Temp\file.txt 

e poi sarei nel mondo degli affari, perché non sarebbe davvero importa più se l'utente ha fornito un percorso assoluto o relativo. Ma in realtà, l'uscita è

C:\Temp\C:\Temp\file.txt 

Il che significa che devo capire il percorso relativo esatto (o almeno prova diverse opzioni per vedere se il file esiste). Sto fraintendendo il JavaDoc?

+0

Il percorso del percorso figlio deve essere un percorso relativo. La conversione parla di barre e barre retroverse, penso. Nel tuo caso, dovresti capire se il percorso è assoluto prima di procedere. – Thilo

+0

Il comportamento è lo stesso se si utilizza il (più corretto) '" C: \\ Temp "' e '" C: \\ Temp \\ file.txt "' invece di utilizzare le interazioni in avanti? Al momento non ho un PC Windows con JDK installato, quindi non posso testarlo. Inoltre: cosa significa 'nuovo file (" C:/Temp "). IsAbsolute()' stampa? –

+0

@Joachim: Sia '" C:/Temp "' che '" C: \\ Temp "' sono trattati allo stesso modo. 'new File (" C:/Temp "). isAbsolute()' stampa 'true'. – Geert

risposta

7

Se la stringa bambino percorso è assoluta, allora è convertita in un percorso relativo in un modo dipendente dal sistema.

presumo questo significa che, anche se si forniscono un percorso assoluto, viene convertito (in modo dipendente sistema), e trattato come un percorso relativo.

Il che significa che devo capire il percorso relativo esatto (o almeno prova diverse opzioni per vedere se il file esiste).

Sì, credo di sì.

Questo potrebbe forse essere fatto facilmente con

file.getAbsolutePath().startsWith(parent.getAbsolutePath()); 

per verificare se si tratta di un percorso assoluto a una directory in parent, e

file.getAbsolutePath().substring(parent.getAbsolutePath().length()); 

per ottenere la parte relativa.

+0

Hmm, potresti avere ragione quando dici che il percorso assoluto è trattato come un percorso relativo (è certamente quello che sembra). Sarebbe un peccato (e povero JavaDoc imho ;-)). Conoscerò un po 'i tuoi suggerimenti per vedere cosa funziona per me, grazie! – Geert

Problemi correlati