web-dev-qa-db-fra.com

Variable d'environnement pour contrôler Java.io.tmpdir?

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?

95
Zach Hirsch

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.

110
delfuego

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

98
Bryan Kyle

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.

58
John St. John

Utilisation

$ Java -XshowSettings
Property settings:
    Java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
    Java.io.tmpdir = /tmp
35
Nisar Ahmed

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
26
Bozho

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.

16
Stephen C

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.

0
suhas