È sicuro convertire i percorsi dei file di Windows in percorsi di file Unix con una semplice sostituzione?

11

Quindi, ad esempio, dire che l'ho fatto in modo che tutti i miei file vengano trasferiti da una macchina Windows a una macchina Unix come tale:% da% a C:\test\myFile.txt (la lettera di unità è irrilevante a questo punto).

Attualmente, la nostra libreria di utilità che abbiamo creato noi stessi fornisce un metodo che sostituisce semplicemente tutte le barre posteriori con barre in avanti:

public String normalizePath(String path) {
   return path.replaceAll("\", "/");
}

Le barre sono riservate e non possono far parte di un nome di file, quindi la struttura della directory deve essere preservata. Tuttavia, non sono sicuro che ci siano altre complicazioni tra Windows e percorsi unix di cui potrei aver bisogno (ad esempio: nomi non ASCII, ecc.)

    
posta That Umbrella Guy 16.06.2014 - 18:26
fonte

5 risposte

6

Sì, se esegui solo la sostituzione su Windows, e disattivala quando è in esecuzione su altri sistemi.

Fare la sostituzione su sistemi Unix è sbagliato perché \ è un carattere valido in un file o nome di directory su piattaforme tipo Unix. Su queste piattaforme , solo NUL e / sono vietati nei nomi di file e directory.

Inoltre, alcune funzioni dell'API di Windows (principalmente quelle di livello inferiore) non consentono l'uso delle barre in avanti - i backslash devono essere utilizzati con esse.

    
risposta data 23.07.2014 - 02:41
fonte
3

Sì, ma tutta questa faccenda è un punto controverso. Java converte senza interruzioni le barre in avanti e indietro le barre su Windows. Puoi semplicemente utilizzare le barre in avanti per tutti i percorsi che sono hardcoded o memorizzati nella configurazione e funzionerà per entrambe le piattaforme.

Personalmente, uso sempre la barra diretta anche su Windows perché è non il carattere di escape. Se il percorso raw è in codice o esternalizzato in un file delle proprietà, lo codifico allo stesso modo.

Provalo! Funzionerà su Windows. Ovviamente, modifica il percorso effettivo a qualcosa che esiste e il tuo utente ha il permesso di leggere.

File f = new File("c:/some/path/file.txt");
if (!f.canRead()) {
  System.out.println("Uh oh, Snowman was wrong!");
}

Bonus: puoi anche mescolare le barre nello stesso percorso!

File f = new File("c:/some\path/file.txt");
if (!f.canRead()) {
  System.out.println("Uh oh, Snowman was wrong again!");
}
    
risposta data 22.08.2014 - 03:26
fonte
2

No. Ci sono molte più cose da pensare oltre al separatore del percorso (la cosa "\ vs /"). Come menziona Rob Y, c'è come vengono gestiti gli spazi e la loro alta frequenza nell'uso di Windows. Ci sono diversi personaggi illegali nei due ambienti. C'è la volontà di Unix di consentire quasi tutto quando è sfuggito da una "\" in testa. C'è l'uso di Windows di "" 'per gestire gli spazi incorporati, c'è l'uso di Windows di UCS-16 e Unix di ASCII o UTF-8.

etc. , etc. , etc.

Ma , per molte applicazioni in grado di limitare i nomi dei percorsi da manipolare, puoi farlo nel modo che preferisci. E funzionerà in almeno un gran numero di casi, ma non tutti.

    
risposta data 22.08.2014 - 03:02
fonte
1

Un'altra complicazione di Windows è che supporta anche la notazione UNC e le lettere di unità tradizionali.

È possibile accedere a un file su un server di file remoto come \server\sharename\path\filename .

    
risposta data 22.08.2014 - 12:39
fonte
-1

Ogni sistema operativo Microsoft, a partire da MS-DOS, ha compreso, a livello di kernel, sia barre che barre rovesciate .

Pertanto, su Windows, puoi convertirli liberamente; entrambi hanno lo stesso status di separatori riservati. In qualsiasi percorso valido, puoi sostituire i backslash con le barre e viceversa, senza cambiarne il significato, per quanto riguarda il kernel.

Nelle prime versioni di DOS, l'interprete command.com di Microsoft lo rendeva una preferenza configurabile con la quale veniva usata la barra per visualizzare e analizzare i percorsi. Alla fine è stato rimosso.

Alcuni programmi di spazio utente in Windows come, oh, la shell di Windows ( explorer.exe ) non amano le barre in avanti. È solo una programmazione scadente in quei programmi.

    
risposta data 08.07.2016 - 05:16
fonte

Leggi altre domande sui tag