2013-02-15 28 views
6

मैं मैं सिर्फ अद्यतन करने हूँ मालसूची फ़ाइल पैकेज के नाम उस के लिए पोर्ट लाइट और पूर्ण संस्करण के लिए केवल एक परियोजना का उपयोग कर रहा हूँ।कैसे प्राप्त करने पैकेज का नाम या स्रोत कक्षा एंड्रॉयड में फ़ाइल?

मेरे परियोजना संरचना की तरह है इस

मेरे एप्लिकेशन
और thinsp; & thinsp; & thinsp; & thinsp; & thinsp; | _src
और thinsp; & thinsp; & thinsp; और Thinsp; और Thinsp; और Thinsp; | _com.example.myapp
और thinsp; & thinsp; & thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; और Thinsp; | _MyClass.java

और मेरे घोषणापत्र पैकेज के नाम अलग हैं।

पैकेज = "com.example.myapplite"

मैं एक पुस्तकालय परियोजना है कि मैं वर्गों के पैकेज के नाम है कि मैं MyApp में उपयोग कर रहा हूँ चाहता हूँ उपयोग कर रहा हूँ।

मैं इस

 System.out.println("Package Name " + context.getPackageName()); 

लेकिन इसकी दे नियोक्ताओं मुझे एक मैनिफ़ेस्ट फ़ाइल पैकेज का नाम मूल्य यानी इस्तेमाल किया है। com.example.myapplite

मैं MyClass.java पैकेज के नाम करना चाहता हूँ। यानी। com.example.myapp

इसके अलावा, मैं इस

MyClass mClass = new MyClass(); 
Package pack = mClass.getClass().getPackage(); 

के बारे में जानकारी है लेकिन क्योंकि मैं अपने पुस्तकालय परियोजना में वर्ग फ़ाइल प्राप्त करने के लिए अगला दृष्टिकोण का उपयोग कर रहा मैं इस दृष्टिकोण का उपयोग नहीं कर सकते

Class c = Class.forName("package_name.MyClass"); 

पैकेज के नाम कैसे प्राप्त करने के लिए या प्रोग्राम के रूप में फाइल MyClass.java?

+1

कोशिश उपयोग करें:। YourClass.class.getPackage() getName(); – Martin

+0

यह स्पष्ट तुम क्यों 'प्रयोग करेंगे नई MyClass नहीं है()। GetClass()' (effectief) के बजाय सिर्फ 'MyClass.class' ... या क्यों है कि आप के लिए पर्याप्त नहीं है। का उपयोग करने का आपका स्पष्टीकरण 'Class.forName' वास्तव में आप क्या करने की कोशिश कर रहे हैं क्या व्याख्या नहीं करता। क्या आप * इच्छा * तुम क्या कर सकते हैं कि 'Class.getPackage()' आप के लिए काम नहीं करता हो? –

+0

मैं अपने पुस्तकालय परियोजना में MyClass उपयोग करने के लिए पुस्तकालय परियोजना का उपयोग कर रहा मैं इसे Class.forName ("package_name.MyClass") का उपयोग करने की जरूरत है; क्योंकि पुस्तकालय परियोजना व्याख्याता MyClass के बारे में जागरूक।जावा – Mac

उत्तर

8

पूर्ण

package org.kodejava.example.lang; 
import java.util.Date; 

public class ObtainingPackageName { 
public static void main(String[] args) { 
    // 
    // Create an instance of Date class, and then obtain the class package 
    // name. 
    // 
    Date date = new Date(); 
    Package pack = date.getClass().getPackage(); 
    String packageName = pack.getName(); 
    System.out.println("Package Name = " + packageName); 

    // 
    // Create an insatnce of our class and again get its package name 
    // 
    ObtainingPackageName o = new ObtainingPackageName(); 
    packageName = o.getClass().getPackage().getName(); 
    System.out.println("Package Name = " + packageName); 
    } 
} 
+0

मैं लाइब्रेरी प्रोजेक्ट का उपयोग कर रहा हूं, इसलिए मैं इसे एक्सेस करने से पहले MyClass की ऑब्जेक्ट नहीं बना सकता। मैं Class.forName ("package_name.MyClass") का उपयोग कर रहा हूं; उस वर्ग तक पहुंचने के लिए मुझे पैकेज नाम की आवश्यकता है। – Mac

+1

ध्यान रखें कि क्लास.getPackage() कक्षा के लिए क्लास लोडर पैकेज पंजीकृत नहीं करता है, तो शून्य वापस आ सकता है। यह आमतौर पर ClassLoader.definePackage() का उपयोग कर क्लासलोडर के भीतर से किया जाता है। आप इसे क्रिया में देख सकते हैं उदाहरण के लिए URLClassLoader। यदि आप कस्टम क्लासलोडर इंस्टॉल नहीं कर रहे हैं, तो आपको कोई समस्या नहीं होनी चाहिए क्योंकि कक्षाओं को लोड करते समय डिफ़ॉल्ट क्लासलोडर संकुल को परिभाषित करेगा। – Timmos

+0

आउटपुट क्या है? – winklerrr

2

यह कोशिश की सहायता हो सकता है,

try { 
     Class c = Class.forName("package_name.MyClass"); 

     Object o = c.newInstance(); 

     Package p = o.getClass().getPackage(); 

     System.out.println("Package Name :: " + p.getName()); 

    } catch (ClassNotFoundException e) {    
     e.printStackTrace(); 
    } catch (InstantiationException e) {    
     e.printStackTrace(); 
    } catch (IllegalAccessException e) {    
     e.printStackTrace(); 
    } 
+0

यह समाधान अच्छा प्रतीत होता है, लेकिन क्या नया उदाहरण बनाये बिना पैकेज नाम प्राप्त करने का कोई तरीका है? –

+0

@FelipeMosso बस किसी भी उदाहरण पर '.getClass()। GetPackage()। GetName()' का उपयोग करें या '[YourClassName] .class.getPackage()। GetName() ' – winklerrr

0
String packageName = this.getClass().getPackage().getName(); 

निश्चित रूप से काम करेंगे।

0

कुछ वर्ग NotificationListener का सरल उदाहरण:

Timber.d(NotificationListener.class.getPackage().getName()); 
Timber.d(NotificationListener.class.getSimpleName()); 
Timber.d(NotificationListener.class.getName()); 

आउटपुट:

D/PermissionsUtil: com.example.receivers 
D/PermissionsUtil: NotificationListener 
D/PermissionsUtil: com.example.receivers.NotificationListener