2013-08-08 7 views
6

मुझे जावा फ़ंक्शन createTempFile("test", "test") पर कॉल करते समय 'सिस्टम निर्दिष्ट पथ नहीं मिल रहा है' कहने का अपवाद मिलता है। कोशिश की गई लेकिन कोई भाग्य नहीं है। क्या किसी को पता है कि जावा को अपना डिफ़ॉल्ट अस्थायी पथ कहाँ मिलता है और यह कैसे नहीं मिल सकता है? विंडोज चर सही होने लगते हैं और उन्हें बदलना जावा को प्रभावित नहीं करता है।बनाने के दौरान सिस्टम पथ नहीं ढूंढ सकता है TempFile

+3

संहिताओं कृपया ... –

+2

जांच क्या स्ट्रिंग dirName = System.getProperty ("java.io.tmpdir") में; और शायद tempDir direclty को परिभाषित करने का प्रयास करें: File.createTempFile (स्ट्रिंग उपसर्ग, स्ट्रिंग प्रत्यय, फ़ाइल निर्देशिका) – Horuss

+0

फ़ाइल। क्रेटटेम्फाइल ("परीक्षण", "परीक्षण") कोड के दौरान बहुत सुंदर है :) – user1985273

उत्तर

13

किसी को जहां जावा उसके डिफ़ॉल्ट अस्थायी पथ

यह java.io.tmpdir संपत्ति से पढ़ी जाती हो जाता है से पता है।

Files.createTempFile("test", "test"); 

अनिवार्य रूप से java.nio.file.TempFileHelper.createTempFile(null, prefix, suffix, attrs); जो फिर java.nio.file.TempFileHelper.create(dir, prefix, suffix, false, attrs); कॉल कहते हैं। वहाँ, अगर dir अशक्त है, यह tmpdir पर सेट किया जाता है जो इस प्रकार के रूप में घोषित किया गया है:

private static final Path tmpdir = 
    Paths.get(doPrivileged(new GetPropertyAction("java.io.tmpdir"))); 

आप के रूप @Joni से जवाब में दिखाया गया है स्पष्ट रूप से गुण सेट कर सकते हैं। आप इसे स्पष्ट रूप से सेट नहीं है, JVM स्टार्टअप पर एक मंच विशिष्ट डिफ़ॉल्ट मान पर यह initializes - भी Environment variable to control java.io.tmpdir?

देख सकते हैं और यह कैसे नहीं पाया जा सकता है?

गलत निर्देशिका के लिए संपत्ति java.io.tmpdir अंक, अस्थायी फ़ाइल नहीं बनाया जा सकता है।

7

कैसे डिफ़ॉल्ट मान प्राप्त किया जाता है की स्वतंत्र रूप से, आप सिस्टम संपत्ति java.io.tmpdir सेट करते समय JVM शुरू करने से अस्थायी फ़ाइलें निर्देशिका सेट कर सकते हैं:

java -Djava.io.tmpdir=/path/to/where/ever/you/like YourClass 

आप को पता है जहां डिफ़ॉल्ट मान से आता है चाहते हैं, आपको अपने जेवीएम के लिए सोर्स कोड पढ़ना होगा।

GetTempPath समारोह जांच के लिए: उदाहरण के लिए, OpenJDK विंडोज पर एपीआई समारोह GetTempPathW (फ़ाइल java_props_md.c के लिए खोज JDK स्रोत कोड में) है, जो वातावरण चर में पथ और निम्नलिखित तरीके से रजिस्ट्री लग रहा है कहता है निम्नलिखित क्रम में पर्यावरण चर का अस्तित्व और पाया गया पहला पथ उपयोग करता है:

  1. टीएमपी पर्यावरण चर द्वारा निर्दिष्ट पथ।
  2. TEMP पर्यावरण चर द्वारा निर्दिष्ट पथ।
  3. USERPROFILE पर्यावरण चर द्वारा निर्दिष्ट पथ।
  4. विंडोज निर्देशिका।

ध्यान दें कि फ़ंक्शन यह सत्यापित नहीं करता है कि पथ मौजूद है, और न ही यह जांचने के लिए परीक्षण करता है कि वर्तमान प्रक्रिया में पथ के किसी भी प्रकार के पहुंच अधिकार हैं या नहीं।

+0

में विफल रहता है, लेकिन अगर मैं टीएमपी एनवी चर बदलता हूं तो java.io.tmpdir अभी भी व्यापक oodatuim पर प्रिंट करता है? – user1985273

+0

मानते हैं कि "oodatuim" का अर्थ है निर्देशिका: शायद आपका प्रोग्राम एक स्क्रिप्ट के साथ लॉन्च किया गया है जो टीएमपी को रीसेट करता है, हो सकता है कि आपको परिवर्तन को प्रभावी होने के लिए सिस्टम को पुनरारंभ करने की आवश्यकता हो, हो सकता है कि आपका JVM GetTempPath फ़ंक्शन का उपयोग न करे, यह जानना असंभव है प्रदान किया गया डेटा। – Joni

3

प्रयास करें:

String path = System.getProperty("java.io.tmpdir"); 

देखें: get property method

और यह यहां पूर्णता के लिए जोड़ने के लिए, वहाँ भी है तरीकों createTempFile(String prefix,String suffix) और जावा के file से createTempFile(String prefix, String suffix, File directory) तरीकों कक्षा।

यहाँ temp फ़ाइल पंख पथ करने के लिए अपने कोड है और अस्थायी रास्ता ढूंढने: इस कोड के

public class GetTempFilePathExample 
{ 
    public static void main(String[] args) 
    { 

     try{ 

      //create a temp file 
      File temp = File.createTempFile("temp-file-name", ".tmp"); 

      System.out.println("Temp file : " + temp.getAbsolutePath()); 

     //Get tempropary file path 
      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/temp-file-name3697762749201044262.tmp 
Temp file path : /tmp 
संबंधित मुद्दे

 संबंधित मुद्दे