Ricevo un'eccezione che dice "il sistema non riesce a trovare il percorso specificato" durante la chiamata alla funzione java createTempFile("test", "test")
. Provato su google, ma senza fortuna. Qualcuno sa da dove java ottiene il suo percorso temporaneo predefinito e come può non essere trovato? Le variabili di Windows sembrano corrette e la loro modifica non ha effetto su java.Il sistema non riesce a trovare il percorso mentre createTempFile
risposta
Qualcuno sa da dove java prende il suo percorso temporaneo predefinito
Viene letto dalla proprietà java.io.tmpdir
.
Files.createTempFile("test", "test");
chiede essenzialmente java.nio.file.TempFileHelper.createTempFile(null, prefix, suffix, attrs);
che chiama nuovamente java.nio.file.TempFileHelper.create(dir, prefix, suffix, false, attrs);
. Lì, se dir
è nullo, è impostato su tmpdir
che viene dichiarato come segue:
private static final Path tmpdir =
Paths.get(doPrivileged(new GetPropertyAction("java.io.tmpdir")));
È possibile impostare la proprietà in modo esplicito, come indicato nella risposta da @Joni. Se non si imposta in modo esplicito, la JVM inizializza a uno specifico valore di default della piattaforma in fase di avvio - vedi anche Environment variable to control java.io.tmpdir?
e come può non essere trovato?
se la proprietà java.io.tmpdir
punta a una directory non valida, il file temporaneo non possono essere creati.
Indipendentemente da come si ottiene il valore di default, è possibile impostare la directory dei file temporanei impostando la proprietà di sistema java.io.tmpdir
quando si avvia la JVM:
java -Djava.io.tmpdir=/path/to/where/ever/you/like YourClass
Se volete sapere dove il valore di default da cui proviene, dovrai leggere il codice sorgente per la tua JVM. Ad esempio, OpenJDK su Windows chiama la funzione API GetTempPathW
(cercare il file java_props_md.c
nel codice sorgente JDK), che cerca il percorso in variabili di ambiente e di registro nel seguente modo:
I
GetTempPath
controlli funzionali per l'esistenza di variabili di ambiente nel seguente ordine e utilizza il primo percorso trovato:
- Il percorso specificato dalla variabile di ambiente TMP.
- Il percorso specificato dalla variabile di ambiente TEMP.
- Il percorso specificato dalla variabile di ambiente USERPROFILE.
- La directory di Windows.
Si noti che la funzione non verifica che il percorso esista, né verifica se il processo corrente ha alcun tipo di diritti di accesso al percorso.
Ma se cambio le variabili env di TMP allora java.io.tmpdir stampa ancora in oodatuim pervious? – user1985273
Supponendo "oodatuim" significa directory: forse il tuo programma viene avviato con uno script che ripristina TMP, forse è necessario riavviare il sistema affinché la modifica abbia effetto, forse la tua JVM non usa la funzione GetTempPath, è impossibile sapere con i dati forniti. – Joni
Prova:
String path = System.getProperty("java.io.tmpdir");
See: get property method
E per aggiungerlo qui per completezza, ci sono anche i metodi createTempFile(String prefix,String suffix) e createTempFile(String prefix, String suffix, File directory) metodi da Java di file classe.
Ecco il mio codice al percorso fin del file temporaneo e trovare il percorso temp:
public class GetTempFilePathExample
{
public static void main(String[] args)
{
try{
//create a temp file
File temp = File.createTempFile("temp-file-name", ".tmp");
System.out.println("Temp file : " + temp.getAbsolutePath());
//Get tempropary file path
String absolutePath = temp.getAbsolutePath();
String tempFilePath = absolutePath.
substring(0,absolutePath.lastIndexOf(File.separator));
System.out.println("Temp file path : " + tempFilePath);
}catch(IOException e){
e.printStackTrace();
}
}
}
uscita di questo codice è:
Temp file : /tmp/temp-file-name3697762749201044262.tmp
Temp file path : /tmp
- 1. FileNotFoundException (Il sistema non riesce a trovare il percorso specificato)
- 2. Il clone mercuriale non riesce con Il sistema non riesce a trovare il percorso specificato
- 3. javaw.exe non riesce a trovare il percorso
- 4. jcifs.smb.SmbException: il sistema non riesce a trovare il file specificato?
- 5. Il sistema non può trovare il percorso specificato con FileWriter
- 6. errore CreateProcess = 2, il sistema non riesce a trovare il file specificato nella Roo
- 7. VBScript WScript.Shell Run() - Il sistema non riesce a trovare il file specificato
- 8. "Il sistema non riesce a trovare il percorso specificato." messaggio di errore quando si tenta di avviare GlassFish con asadmin
- 9. Excel .NET COM - Errore di automazione. Il sistema non riesce a trovare il file specificato
- 10. Errore CreateProcess = 2, Il sistema non riesce a trovare il file specificato [Studio Android]
- 11. Il sistema non riesce a trovare il file specificato. in Visual Studio
- 12. IOException: impossibile eseguire il programma "javac": errore CreateProcess = 2, il sistema non riesce a trovare il file specificato
- 13. Visual Studio non riesce a trovare il processo w3wp
- 14. node.js: non riesce a trovare il modulo 'richiesta'
- 15. Il pallone non riesce a trovare la cartella statica
- 16. Come leggere il file dal percorso relativo nel progetto Java? java.io.File non riesce a trovare il percorso specificato
- 17. Django non riesce a trovare il modulo python MySQLdb
- 18. crosstools-ng non riesce a trovare pthread.so
- 19. Graphviz non riesce a trovare alcun carattere
- 20. arduino nano-avrdude: ser_open(): il sistema non può aprire il dispositivo "\\. \ COM1": il sistema non riesce a trovare il file specificato
- 21. Errore debugger "Impossibile allegare. Il sistema non riesce a trovare il file specificato "dall'emulatore Ripple e Android
- 22. Errore: Impossibile eseguire il programma "jar": errore di CreateProcess = 2, il sistema non riesce a trovare il file specificato
- 23. Browserify - non riesce a trovare il modulo 'jQuery'
- 24. Travis non riesce a trovare il mio .travis.yml
- 25. Electron-packager: non riesce a trovare il modulo
- 26. javascript nodegit non riesce a trovare il telefono remoto
- 27. Razor non riesce a trovare il mio helper HTML
- 28. PHP Captcha non riesce a trovare il file TTF
- 29. node.js richiedono non riesce a trovare il modulo personalizzato
- 30. Perché Scala non riesce a trovare il pacchetto org.apache.commons.lang?
Codici prega ... –
controllo che cosa è in String dirName = System.getProperty ("java.io.tmpdir"); E forse prova anche a definire tempDir direttamente con: File.createTempFile (String prefisso, String suffisso, Directory file) – Horuss
File.CreateTempFile ("test", "test") è prettymuch il codice while :) – user1985273