View Full Version : [Java]
Salve ho un problema veloce veloce.....
Creo un flusso di dati per il quale mi serve un file di partenza.
Questo file pero' voglio che sia variabile e non capisco come mettere un percorso...
Infatti posso solo mettere nomi di file all'interno della directory in cui e' il .class
Io invece voglio poter prendere un file in chessoio c:\filez\prova.txt (se lo scrivo cosi' li' dove vuole la stringa del file mi sputa)
il percorso lo deve inserire l'utente
Altro problema.....
io devo poter far girare il programma su altri sistemi operativi(linux).....come gestisco i path?(non mi intendo di linux)
Grazie mille a tutti =)
Fumereo
ilsensine
22-10-2003, 07:52
I path sui sistemi unix usano il separatore di directory "/" invece di "\", e non esiste il concetto di partizione c: d: ecc. (le partizioni sono gestite in altro modo). Un tipico percorso di un file è questo, ad esempio:
/usr/lib/libjpeg.so
Non conosco java, ma sicuramente ha degli strumenti per gestire i path in modo indipendente dal s/o.
Se lo scrivi così funziona
c:\filez\prova.txt
solo ke se è 1 costante da codice e qindi tra virgolette
\ è l'escape character
cioè nn t considera il carattere dopo e serve per fare cose particolari.
Ad esempio x andare a capo scrivi \n
per inserire 1 \ tra virgolette devi scrivere \\
e qindi
"c:\\filez\\prova.txt"
x qanto riguarda linux devi solo mettere la / invece di \ (e in tal caso ne basta 1)
Originariamente inviato da ilsensine
Non conosco java, ma sicuramente ha degli strumenti per gestire i path in modo indipendente dal s/o.
esatto, la classe java.io.File ha una stringa statica chiamata pathSeparator che contiene il separatore relativo al SO in cui stai eseguendo la VM
dalla documentazione:
The prefix concept is used to handle root directories on UNIX platforms, and drive specifiers, root directories and UNC pathnames on Microsoft Windows platforms, as follows:
* For UNIX platforms, the prefix of an absolute pathname is always "/". Relative pathnames have no prefix. The abstract pathname denoting the root directory has the prefix "/" and an empty name sequence.
* For Microsoft Windows platforms, the prefix of a pathname that contains a drive specifier consists of the drive letter followed by ":" and possibly followed by "\" if the pathname is absolute. The prefix of a UNC pathname is "\\"; the hostname and the share name are the first two names in the name sequence. A relative pathname that does not specify a drive has no prefix.
Originariamente inviato da kingv
esatto, la classe java.io.File ha una stringa statica chiamata pathSeparator che contiene il separatore relativo al SO in cui stai eseguendo la VM
Confermo in pieno ;)
Oppure ancora meglio:
String file_separator = System.getProperty("file.separator");
if(file_separator.equals("/"))
OS = "unix";
else
OS = "win";
grazie ...quindi per meglio capire....
io chiedo all'utente di inserire il path del file da scegliere....lui me lo scrive...io lo infilo in una stringa File.
Poi con quel codice li' riconosco se l'utente usa win o unix
(domanda che valore viene dato a file_separator con questo metodo System.getProperty("file.separator")? non mi e' del tutto chiaro)
a quel punto magari nel caso di win per usare il path nel codice uso uno stringTokenizer e dove vedo un \ ce ne metto un altro in modo da ottenere \\ .......e' sensata ocme idea?
Fum
Originariamente inviato da Fumereo
a quel punto magari nel caso di win per usare il path nel codice uso uno stringTokenizer e dove vedo un \ ce ne metto un altro in modo da ottenere \\ .......e' sensata ocme idea?
Fum
del primo pezzo non ho capito un tubo, ma per il secondo ti dico di no:
se scrivo
String pippo="c:\\winnt\\system32"
devo raddoppiare i '\\' perche' non siano interpretati dal compilatore come caratteri di escape.
ma se hai una string che contiene il carattere '\\' non devi raddoppiare un bel niente ;)
Vuoi un consiglio'? Usa un FileChoseer che ti rende tutto trasparente... cmq System.getProperty("file.separator")? ti restituisce "\\" per WIn e "/" per Unix
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.