java.io.tmpdir в Windows и Linux

Только что попробовал запустить в Убунту программу, разработанную под Windows. Ну что сказать - был удивлен.

System.getProperty("java.io.tmpdir") в Windows возвращает что-то наподобие:

C:\Windows\Temp\

А в Linux мне приходит вот что:

/tmp

Обратите внимание - в первом случае завершающий слеш есть, а во втором - нет, что требует дополнительной проверки в коде.

"Java: написано однажды - тестируем везде" (c)

4 коммент. | добавить комментарий :: java.io.tmpdir в Windows и Linux

  1. Да потому что нехрен генерировать имена файлов руками, конструктор File(String parent, String child) для чего придуман?
    А если нужно просто временный файл создать, для этого правильнее использовать File.createTempFile(String prefix, String suffix).

  2. Та шо ж ты аггрессивный такой!

    Мне просто нужна строка с этой проперти, причем со слешом в конце. Она потом пойдет в либу заказчика, лежащую в Trunk, где к ней _руками_ допишут имя каталога и будут дрюкать...

    В аутсорсинге ведь не все можно править по своему желанию, если ты еще не забыл ;)

  3. В любом случае, приехавшее имя файла проверяют на
    File.isDirectory() и File.exists()
    B для конструирования имени файла (не через File(String parent, String child)), всегда используют системо-зависимый разделитель имени файлов, File.separator. В случае если он будет присутсвовать дважды, не произойдет ничего страшного

  4. Тут вот что примечательно: в случае Windows (C:\\Temp\\Pse\\) - действительно не произойдет (поскольку первый слеш, фактически, эскейпит второй), а в Linux (//tmp//pse) - как раз произойдет - exists() вернет false.

Отправить комментарий