J'ai utilisé la variable d'environnement TMP
pour contrôler des choses telles que l'emplacement où gcc écrit ses fichiers temporaires, mais je ne trouve pas d'équivalent pour l'API createTempFile de Java.
Une telle variable d'environnement existe-t-elle?
Hmmm - comme cela est géré par la JVM, je me suis plongé un peu dans le code source OpenJDK VM, pensant que peut-être ce que fait OpenJDK imite celui de Java 6 et versions antérieures . Il n'est pas rassurant de savoir qu'il existe un moyen de le faire autrement que sous Windows.
Sur Windows , la fonction get_temp_directory()
d'OpenJDK effectue un appel d'API Win32 à GetTempPath()
; Ainsi, sous Windows, Java reflète la valeur de la variable d'environnement TMP
.
Sur Linux et Solaris , les mêmes fonctions get_temp_directory()
renvoient une valeur statique de /tmp/
.
Je ne sais pas si le JDK6 correspond à ces conventions, mais à en juger par le comportement de chacune des plateformes répertoriées, il semble que ce soit le cas.
Selon le Java.io.File
Java Docs
Le répertoire de fichier temporaire par défaut est spécifié par la propriété système Java.io.tmpdir. Sur les systèmes UNIX, la valeur par défaut de cette propriété est généralement "/ tmp" ou "/ var/tmp". sur les systèmes Microsoft Windows, il s’agit généralement de "c:\temp". Une valeur différente peut être attribuée à cette propriété système lorsque la machine virtuelle Java est invoquée, mais les modifications apportées par programme à cette propriété n'ont aucun effet sur le répertoire temporaire utilisé par cette méthode.
Pour spécifier la propriété Java.io.tmpdir
System, vous pouvez appeler la machine virtuelle Java de la manière suivante:
Java -Djava.io.tmpdir=/path/to/tmpdir
Par défaut, cette valeur doit provenir de la variable d'environnement TMP
sur les systèmes Windows
Vous pouvez définir votre variable d'environnement _Java_OPTIONS
. Par exemple, en bash, cela ferait l'affaire:
export _Java_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
Je l'ai mis dans mon script de connexion bash et il semble faire l'affaire.
Utilisation
$ Java -XshowSettings
Property settings:
Java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
Java.io.tmpdir = /tmp
Ce n'est pas une variable d'environnement, mais vous permet de contrôler le répertoire temp:
-Djava.io.tmpdir
ex.:
Java -Djava.io.tmpdir=/mytempdir
Pour être clair sur ce qui se passe ici:
La méthode recommandée pour définir l'emplacement du répertoire temporaire consiste à définir la propriété System appelée "Java.io.tmpdir", par exemple. en donnant l'option -Djava.io.tmpdir=/mytempdir
à la commande Java
. La propriété peut également être modifiée à partir d'un programme en appelant System.setProperty("Java.io.tmpdir", "/mytempdir)
... problèmes de sécurité modulo sandbox.
Si vous ne définissez pas explicitement la propriété "Java.io.tmpdir" au démarrage, la machine virtuelle Java l'initialise sur une valeur par défaut spécifique à la plate-forme. Pour Windows, la valeur par défaut est obtenue par un appel à une méthode de l'API Win32. Pour Linux/Solaris, la valeur par défaut est apparemment câblée. Pour d'autres machines virtuelles, cela pourrait être autre chose.
De façon empirique, la variable d’environnement "TMP" fonctionne sous Windows (avec les machines virtuelles actuelles), mais pas sur d’autres plates-formes. Si vous tenez à la portabilité, vous devez définir explicitement la propriété système.
Utilisez la commande ci-dessous sur le terminal UNIX:
Java -XshowSettings
Ceci affichera toutes les propriétés Java et tous les paramètres système. Dans cette recherche de Java.io.tmpdir
valeur.