2010-10-27 11 views
29

मैं एक जावा अनुप्रयोग है, जहां मैं log4j उपयोग कर रहा हूँ बनाने रहा हूँ। मैंने कॉन्फ़िगरेशन log4j फ़ाइल का पूर्ण पथ दिया है और जेनरेट लॉग फ़ाइल का एक पूर्ण पथ भी दिया है (जहां यह लॉग फ़ाइल जेनरेट की गई है)। मैं के माध्यम से चलाने के समय में एक जावा वेब अनुप्रयोग का निरपेक्ष पथ प्राप्त कर सकते हैं:रनटाइम पर जावा एप्लिकेशन का असली पथ कैसे प्राप्त करें?

String prefix = getServletContext().getRealPath("/"); 

लेकिन एक सामान्य जावा अनुप्रयोग के संदर्भ में, हम क्या कर सकते हैं?

उत्तर

34

प्रयास करें;

String path = new File(".").getCanonicalPath(); 
+12

'System.getProperty ("user.dir") भी है, जो 'IOException' नहीं फेंक सकता है। – Jonathan

+3

क्या यह वास्तव में निर्देशिका को वापस करता है जहां एप्लिकेशन इंस्टॉल किया गया है? ऐसा लगता है कि इसे कार्यशील निर्देशिका वापस करनी चाहिए, जो जरूरी नहीं है। –

+0

इसका परीक्षण किया गया और यह कार्य निर्देशिका को वापस करता है, न कि एप्लिकेशन की निर्देशिका। –

3

यदि आप किसी वेब एप्लिकेशन के बारे में बात कर रहे हैं, तो आपको ऑब्जेक्ट से getRealPath का उपयोग करना चाहिए।

उदाहरण:

public class MyServlet extends Servlet { 
    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
       throws ServletException, IOException{ 
     String webAppPath = getServletContext().getRealPath("/"); 
    } 
} 

आशा इस मदद करता है।

+0

उत्तर के लिए धन्यवाद। –

+0

लेकिन यहां मैं सरल जावा एप्लिकेशन का उपयोग कर रहा हूं। –

+0

@ समीक मिश्रा तो आपने वेब एप्लिकेशन का जिक्र क्यों किया? – EJP

23

यह स्पष्ट नहीं है कि आप क्या कह रहे हैं। मैं नहीं जानता कि 'वेब अनुप्रयोग हम प्रयोग कर रहे हैं के संबंध में' क्या मतलब है अगर getServletContext().getRealPath() जवाब नहीं है, लेकिन:

  • वर्तमान उपयोगकर्ता के वर्तमान कार्यशील निर्देशिका System.getProperty("user.dir")
  • वर्तमान उपयोगकर्ता के द्वारा दिया जाता है होम निर्देशिका द्वारा System.getProperty("user.home")
  • JAR फ़ाइल जिसमें से वर्तमान वर्ग लोड किया गया था this.getClass().getProtectionDomain().getCodeSource().getLocation() द्वारा दिया जाता है के स्थान दिया जाता है।
+2

@Gary क्या आपने इसे पोस्ट करने से पहले प्रलेखन को देखा था? यह वर्तमान कामकाजी निर्देशिका है। 'user.home' उपयोगकर्ता की होम निर्देशिका है। – Jonathan

+0

@ जोनाथन क्षमा करें। तुम ठीक हो और मैं गलत हूँ। आज बहुत ज्यादा कॉफी! –

+1

मैं इसे ऊपर उठा रहा हूं। मुझे इस पोस्ट से मेरी समस्या का समाधान नहीं मिला, लेकिन यह कोड मुझे अपनी परियोजना के लिए आवश्यक था। (जावा एप्लिकेशन चलाने का मार्ग प्राप्त करना और java.path -my dll के पथ को हमेशा इस पथ में जोड़ें-) धन्यवाद। – yuceel

1

फाइलों को उपयोगकर्ता की उप-निर्देशिका में सहेजना बेहतर है। कहीं भी ऐप से कहीं भी। हो सकता है

सूर्य काफी प्रयास के लिए गया था कि एप्लेट और क्षुधा सुनिश्चित करने के लिए। जावा वेब स्टार्ट का उपयोग करके लॉन्च किया गया ऐप निर्धारित नहीं कर सकता है। असली रास्ता इस बदलाव ने कई ऐप तोड़ दिए। अगर आश्चर्य अन्य ऐप्स तक बढ़ाया जाता है तो मुझे आश्चर्य नहीं होगा।

-1

अभिव्यक्ति

new File(".").getAbsolutePath(); 

आप JVM के निष्पादन के साथ जुड़े वर्तमान कार्यशील निर्देशिका मिल जाएगा। हालांकि, JVM

System.getProperty(propertyName); 

इंटरफ़ेस के माध्यम से अन्य उपयोगी गुणों का धन प्रदान करता है। इन गुणों की एक सूची can be found here

ये आप मौजूदा उपयोगकर्ताओं निर्देशिका, अस्थायी निर्देशिका और इतने पर संदर्भ के लिए एक मंच स्वतंत्र ढंग से की अनुमति देगा।

7

और के बारे में क्या this.getClass().getProtectionDomain().getCodeSource().getLocation() का उपयोग कर?

0
/***************************************************************************** 
    * return application path 
    * @return 
    *****************************************************************************/ 
    public static String getApplcatonPath(){ 
     CodeSource codeSource = MainApp.class.getProtectionDomain().getCodeSource(); 
     File rootPath = null; 
     try { 
      rootPath = new File(codeSource.getLocation().toURI().getPath()); 
     } catch (URISyntaxException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }   
     return rootPath.getParentFile().getPath(); 
    }//end of getApplcatonPath() 
+1

यदि कोई तरीका 'URISyntaxException' है तो यह कोड' NullPointerException' फेंक देगा। – EJP

+0

यह NullPointerException फेंक नहीं देगा –

1

एक JAR और एक आवेदन एक IDE अलग है अंदर से चलाने का आवेदन पथ के बाद से, मैं निम्नलिखित कोड लगातार सही वर्तमान निर्देशिका वापस जाने के लिए लिखा है:

import java.io.File; 
import java.net.URISyntaxException; 

public class ProgramDirectoryUtilities 
{ 
    private static String getJarName() 
    { 
     return new File(ProgramDirectoryUtilities.class.getProtectionDomain() 
       .getCodeSource() 
       .getLocation() 
       .getPath()) 
       .getName(); 
    } 

    private static boolean runningFromJAR() 
    { 
     String jarName = getJarName(); 
     return jarName.contains(".jar"); 
    } 

    public static String getProgramDirectory() 
    { 
     if (runningFromJAR()) 
     { 
      return getCurrentJARDirectory(); 
     } else 
     { 
      return getCurrentProjectDirectory(); 
     } 
    } 

    private static String getCurrentProjectDirectory() 
    { 
     return new File("").getAbsolutePath(); 
    } 

    private static String getCurrentJARDirectory() 
    { 
     try 
     { 
      return new File(ProgramDirectoryUtilities.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).getParent(); 
     } catch (URISyntaxException exception) 
     { 
      exception.printStackTrace(); 
     } 

     return null; 
    } 
} 

सीधे शब्दों में getProgramDirectory() कॉल करेगा और आपको चाहिए किसी भी तरह से अच्छा हो।

0

मैं इस विधि का उपयोग जार या एक्सई के लिए पूरा मार्ग पाने के लिए करता हूं।

File pto = new File(YourClass.class.getProtectionDomain().getCodeSource().getLocation().toURI()); 

pto.getAbsolutePath()); 
संबंधित मुद्दे