System.getProperty (“ java.io.tmpdir”) จะส่งคืน“ c: \ temp” เมื่อใด


110

แค่อยากรู้ว่าเมื่อไหร่System.getProperty("java.io.tmpdir")จะกลับ"c:\temp"มา อ้างอิงจากเอกสารJava.io.File Java -

ไดเร็กทอรีไฟล์ชั่วคราวดีฟอลต์ถูกระบุโดยคุณสมบัติระบบ java.io.tmpdir ในระบบ UNIX ค่าดีฟอลต์ของคุณสมบัตินี้โดยทั่วไปคือ "/ tmp" หรือ "/ var / tmp"; ในระบบ Microsoft Windows โดยทั่วไปจะเป็น "c: \ temp" อาจมีการกำหนดค่าที่แตกต่างกันให้กับคุณสมบัติระบบนี้เมื่อเรียกใช้เครื่องเสมือน Java แต่การเปลี่ยนแปลงทางโปรแกรมของคุณสมบัตินี้ไม่ได้รับการรับรองว่าจะมีผลกระทบใด ๆ กับไดเร็กทอรีชั่วคราวที่ใช้โดยวิธีนี้

แต่ในกรณีของฉัน -

System.out.println(System.getProperty("java.io.tmpdir"));

ผลตอบแทนเสมอ -

C:\Users\admin\AppData\Local\Temp\ i.e. %TEMP%

จะกลับมาในสภาพ"c:\temp"ใด

แก้ไข: ถ้าฉันเปลี่ยน% TEMP% เป็น C: \ Temp ฉันจะได้รับ C: \ Temp ใช่ไหม? แต่เอกสารประกอบจะแสดง c: \ Temp แทน C: \ Temp


4
en.wikipedia.org/wiki/Temporary_folderมองไปที่วิกิพีเดียผมว่าคุณสามารถทำให้มันC:\Tempได้โดยการเปลี่ยน% temp% ติดตั้ง Windows 98 java -Djava.io.tmpdir=C:\Tempหรือผ่านไป ตรวจสอบสิ่งนี้ด้วย: stackoverflow.com/questions/3437095/…
bezmax

@Max ขอบคุณ MAX ถ้าฉันเปลี่ยน% TEMP% ถึงแล้วฉันจะได้รับC:\Temp C:\Tempขวา? แต่เอกสารแสดงแทนc:\Temp C:\Temp:)
Ashish Pancholi

2
ฉันไม่รู้ว่าทำไมอักษรระบุไดรฟ์จึงมีความสำคัญกับแอปพลิเคชันของคุณ
ajduke

@AshishPancholi ไม่ได้ไปที่นั่น?
ajduke

1.4.2 Javadoc ที่คุณกำลังเชื่อมโยงนั้นล้าสมัย ปัจจุบัน7 Javadocกล่าวถึงไดเรกทอรี "ปกติ" "C:\\WINNT\\TEMP"ของ
อับดุล

คำตอบ:


128

ใน MS Windows TEMPไดเรกทอรีชั่วคราวจะถูกกำหนดโดยตัวแปรสภาพแวดล้อม ใน XP ไดเร็กทอรีชั่วคราวถูกตั้งค่าสำหรับผู้ใช้แต่ละคนเป็น Local Settings \ Temp

หากคุณเปลี่ยนตัวแปรสภาพแวดล้อม TEMP ของC:\tempคุณเป็นคุณจะได้รับสิ่งเดียวกันเมื่อคุณเรียกใช้:

System.out.println(System.getProperty("java.io.tmpdir"));


2
ใน Windows มีตัวแปรสภาพแวดล้อมที่สองเรียกว่า% TMP% และเป็นตัวแปรที่บางครั้งใช้ไม่ใช่% TEMP% ตัวอย่างเช่นปลั๊กอิน GWT สำหรับ Eclipse ใช้ตัวแปร% TMP%
Wee Shetland

@ โจชิ: คำตอบของคุณค่อนข้างถูกต้อง อย่างไรก็ตามฉันไม่เห็นด้วยกับตัวอย่างที่คุณให้มา: หากผู้ใช้ตั้งค่าTMPenv var ระบบTEMPจะไม่สนใจ โปรดอ้างอิงคำตอบของฉันและแจ้งให้เราทราบหากคุณไม่เข้าใจสิ่งที่ฉันหมายถึง
Zakaria


33

ในมือข้างหนึ่งเมื่อคุณเรียกSystem.getProperty("java.io.tmpdir")การเรียนการสอน, Java GetTempPathเรียกฟังก์ชัน ตามMSDN :

ฟังก์ชัน GetTempPath ตรวจสอบการมีอยู่ของตัวแปรสภาพแวดล้อมตามลำดับต่อไปนี้และใช้เส้นทางแรกที่พบ:

  1. เส้นทางที่ระบุโดยตัวแปรสภาวะแวดล้อม TMP
  2. เส้นทางที่ระบุโดยตัวแปรสภาวะแวดล้อม TEMP
  3. เส้นทางที่ระบุโดยตัวแปรสภาพแวดล้อม USERPROFILE
  4. ไดเร็กทอรี Windows

บนมืออื่น ๆ โปรดตรวจสอบเหตุผลทางประวัติศาสตร์เกี่ยวกับเหตุผลTMPและTEMPอยู่ร่วมกัน น่าอ่านจริงๆ


0

ค่าของ%TEMP%ตัวแปรสภาพแวดล้อมมักจะขึ้นอยู่กับผู้ใช้และ Windows ตั้งค่าโดยคำนึงถึงบัญชีผู้ใช้ที่ล็อกอินอยู่ บางบัญชีผู้ใช้อาจจะมีรายละเอียดผู้ใช้ไม่เช่นเมื่อกระบวนการของคุณทำงานเป็นบริการบนSYSTEM, LOCALSYSTEMหรืออื่น ๆ ที่สร้างขึ้นในบัญชีหรือเรียกโดยโปรแกรมประยุกต์ของ IIS กับตัวตน AppPool กับสร้างผู้ใช้รายละเอียดตัวเลือกปิดการใช้งาน ดังนั้นแม้ว่าคุณจะไม่ได้เขียนทับ%TEMP%ตัวแปรอย่างชัดเจน Windows อาจใช้c:\tempหรือแม้กระทั่งc:\windows\tempโฟลเดอร์สำหรับบัญชีผู้ใช้ที่ไม่ปกติ และที่สำคัญไปกว่านั้นกระบวนการอาจไม่มีสิทธิ์เข้าถึงไดเร็กทอรีนี้!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.