- Как получить временный путь к файлу в Java
- 1. Для Linux временной папкой по умолчанию является ||/tmp
- 2. Создать Временный Файл
- Скачать Исходный Код
- Рекомендации
- Переменная окружения для управления java.io.tmpdir?
- 6 ответов
- Linux command to get current value of java.io.tmpdir
- 4 Answers 4
- Блог Сергея Бородавкина
- 4 коммент. | добавить комментарий :: java.io.tmpdir в Windows и Linux
- Linux command to get current value of java.io.tmpdir
- Solution 2
- Solution 3
- Solution 4
Как получить временный путь к файлу в Java
В Java мы можем использовать System.getProperty (“java.io.tmpdir”), чтобы получить временное местоположение файла.
В Java мы можем использовать System.getProperty(«java.io.tmpdir») , чтобы получить местоположение временного файла по умолчанию.
- Для Windows временная папка по умолчанию – % ПОЛЬЗОВАТЕЛЬ%\AppData\Локальный\Временный
- Для Linux временной папкой по умолчанию является /tmp
1. Для Linux временной папкой по умолчанию является ||/tmp
Запустите приведенную ниже программу Java на Ubuntu Linux.
package com.mkyong.io.temp; public class TempFilePath1 < public static void main(String[] args) < String tmpdir = System.getProperty("java.io.tmpdir"); System.out.println("Temp file path: " + tmpdir); >>
2. Создать Временный Файл
В качестве альтернативы мы можем создать временный файл и подстроку путь к файлу для получения временного расположения файла.
package com.mkyong.io.temp; import java.io.IOException; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; public class TempFilePath2 < public static void main(String[] args) < // Java NIO try < Path temp = Files.createTempFile("", ".tmp"); String absolutePath = temp.toString(); System.out.println("Temp file : " + absolutePath); String separator = FileSystems.getDefault().getSeparator(); String tempFilePath = absolutePath .substring(0, absolutePath.lastIndexOf(separator)); System.out.println("Temp file path : " + tempFilePath); >catch (IOException e) < e.printStackTrace(); >> >
Temp file : /tmp/log_11536339146653799756.tmp Temp file path : /tmp
2.2 Пример ввода-вывода Java.
package com.mkyong.io.temp; import java.io.File; import java.io.IOException; public class TempFilePath3 < public static void main(String[] args) < // Java IO try < File temp = File.createTempFile("log_", ".tmp"); System.out.println("Temp file : " + temp.getAbsolutePath()); 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(); >> >
Temp file : /tmp/log_9219838414378386507.tmp Temp file path : /tmp
Скачать Исходный Код
Рекомендации
Переменная окружения для управления java.io.tmpdir?
Я использовал переменную среды TMP для управления такими вещами, как gcc, которые записывают временные файлы, но я не могу найти эквивалент для java createTempFile API. Существует ли такая переменная среды?
Фактическая ссылка: java.sun.com/javase/6/docs/api/java/io/… , java.lang.String, java.io.File) Stackoverflow не делает правильную вещь, когда я помещаю этот URL в (или когда я заменяю скобки на% 28 и% 29). Я знаю, что использование коротких ссылок — отстой, но я подумал, что это лучше, чем вообще отсутствие ссылок.
все, что я сделал, это перешел по вашей ссылке, скопировал URL из адресной строки моего браузера и вставил его в ваше сообщение, где была ваша короткая ссылка.
6 ответов
Hmmm — так как это обрабатывается JVM, я немного углубился в исходный код OpenJDK VM, думая, что, возможно, что сделано OpenJDK, имитирует то, что сделано на Java 6 и ранее. Не уверен, что есть способ сделать это иначе, чем в Windows.
В Windows функция OpenJDK get_temp_directory() делает вызов API Win32 на GetTempPath() ; это как в Windows, Java отражает значение переменной среды TMP .
В Linux и Solaris, те же функции get_temp_directory() возвращают статическое значение /tmp/ .
Я не знаю, соответствуют ли фактические JDK6 этим точным соглашениям, но поведению на каждой из перечисленных платформ кажется, что они делают.
Чтобы было понятно, вы видите собственный код, который предоставляет значение по умолчанию для свойства «java.io.tmpdir», когда JVM создает объект свойств системы. Это будет переопределено (например) опцией «-Djava.io.tmpdir = . «.
@StephenC, да, в этом-то и дело — ОП искал, как значение по умолчанию для свойства устанавливается в отсутствие его установки самостоятельно (через -Djava.io.tmpdir командной строки -Djava.io.tmpdir для JVM), и если на это значение по умолчанию вообще влияет значение среды. Как наблюдали люди, на Windows , это зависит от TMP переменной окружения, но было неясно, есть ли какая — то неизвестная переменная для других операционных систем. Похоже, что нет, по крайней мере, учитывая то, что мы знаем об OpenJDK.
Хороший ответ, но на Windows GetTempPath() не влияет только переменная среды TMP : msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx
Я видел, что в Solaris Sun JDK значение равно /var/tmp/ (с начальным слешем), для этого есть даже ошибка # 4391434 . А для Mac OS и Linux это /tmp — какой беспорядок!
Linux command to get current value of java.io.tmpdir
I need a Linux command to get current value of java.io.tmpdir Also can you tell me the command to get all the system propeties.
4 Answers 4
JDK provides tools with which you can achieve your goal. Using the specified command, you can display the value of a system variable java.io.tmpdir .
The is the number of the java process for which you want to display the value of the system variable. Id of the java process you can get by using the jps tool, which list all java processes running on your machine.
To see all system variables of the java process, please use this command
All JDK tools are located in $JAVA_HOME/bin directory.
java.io.tmpdir is one of java system properties, so its value exists only inside jvm. To find out what is the value of java.io.tmpdir property you can also write a simple program in java. It may look something like this piece of code:
public class JSystemProperties < public static void main(String[] args) < System.getProperties().list(System.out); >>
The code above will print all java system properties, but you can modify this to print only one system property with name you pass through args array (using System.getProperty(key) method). After you compile this class you can create script (which will run compiled java class) that can be treated as Linux command to get current values of java system properties.
Блог Сергея Бородавкина
Только что попробовал запустить в Убунту программу, разработанную под Windows. Ну что сказать — был удивлен.
System.getProperty(«java.io.tmpdir») в Windows возвращает что-то наподобие:
А в Linux мне приходит вот что:
Обратите внимание — в первом случае завершающий слеш есть, а во втором — нет, что требует дополнительной проверки в коде.
«Java: написано однажды — тестируем везде» (c)
4 коммент. | добавить комментарий :: java.io.tmpdir в Windows и Linux
Да потому что нехрен генерировать имена файлов руками, конструктор File(String parent, String child) для чего придуман?
А если нужно просто временный файл создать, для этого правильнее использовать File.createTempFile(String prefix, String suffix).
Та шо ж ты аггрессивный такой!
Мне просто нужна строка с этой проперти, причем со слешом в конце. Она потом пойдет в либу заказчика, лежащую в Trunk, где к ней _руками_ допишут имя каталога и будут дрюкать.
В аутсорсинге ведь не все можно править по своему желанию, если ты еще не забыл 😉
В любом случае, приехавшее имя файла проверяют на
File.isDirectory() и File.exists()
B для конструирования имени файла (не через File(String parent, String child)), всегда используют системо-зависимый разделитель имени файлов, File.separator. В случае если он будет присутсвовать дважды, не произойдет ничего страшного
Тут вот что примечательно: в случае Windows (C:\\Temp\\Pse\\) — действительно не произойдет (поскольку первый слеш, фактически, эскейпит второй), а в Linux (//tmp//pse) — как раз произойдет — exists() вернет false.
Linux command to get current value of java.io.tmpdir
JDK provides tools with which you can achieve your goal. Using the specified command, you can display the value of a system variable java.io.tmpdir .
The is the number of the java process for which you want to display the value of the system variable. Id of the java process you can get by using the jps tool, which list all java processes running on your machine.
To see all system variables of the java process, please use this command
All JDK tools are located in $JAVA_HOME/bin directory.
java.io.tmpdir is one of java system properties, so its value exists only inside jvm. To find out what is the value of java.io.tmpdir property you can also write a simple program in java. It may look something like this piece of code:
public class JSystemProperties < public static void main(String[] args) < System.getProperties().list(System.out); >>
The code above will print all java system properties, but you can modify this to print only one system property with name you pass through args array (using System.getProperty(key) method). After you compile this class you can create script (which will run compiled java class) that can be treated as Linux command to get current values of java system properties.
Solution 2
For black box Java applications I’ve deployed in the past, I have sometimes been able to find the value of java.io.tmpdir by executing the following command:
Particularly with tomcat apps, you may get an output like this:
Solution 3
For temp dir: there is a good answer here.
For all environment variable, try env command.
Solution 4
Recommended tool now is jcmd, use it like :
jcmd $pid VM.system_properties | grep java.io.tmpdir