by Nikolay Vasilev's Technical Blog » Java | Oct 10, 2007 | Aggregated, properties
Във връзка с въпроса: Къде (и в какъв ред) се търсят *.properties файловете, когато се зареждат с: ResourceBundle.getBundle(filename) се поразрових и преведох следната интересна информация: 1) .properties файловете се зареждат от classloader-а, подобно на .java класовете, т.е. трябва местоположението им да е включено в CLASSPATH променливата на средата. 2) .properties файловете имат пълно име (fully-qualified-resource-name), както при .java класовете, с изключение на това, че не може да се извършва import на ресурcи (.properties файлове) в някой .java клас. 3) ResourceBundle.getBundle("myBundleProps") указва на classloader-a да зареди ресурс с име myBundleProps в пакета по подразбиране. Това не значи, че ресурса трябва да е в текущия пакет, в който е класа, от който се зарежда. 4) ResourceBundle.getBundle("package1.package2.package3.myBundleProps") указва на classloader-a да зареди ресурс myBundleProps с пакет package1.package2.package3. Неговото пълно име (fully-qualified-resource-name) съответно е package1.package2.package3.myBundleProps. Т.е. ако директорийната структура на проекта е следната: project_path +-- src | +-- package1 | +-- package2 | +-- package3 | +-- TestResourceBundle.java +-- classes +-- package1 +-- package2 +-- package3 +-- TestResourceBundle.class +-- myBundleProps.properties и ако в TestResourceBundle.java, ResourceBundel класa се зарежда със следният код: ResourceBundle myBundleProps = ResourceBundle.getBundle( "myBundleProps"); е нужно myBundleProps.properties да се копира в project_path/classes, на същото директорийно ниво на project1 папката. Като алтернатива може да се пакетира myBundleProps.properties в един .jar файл, така че myBundleProps.properties да е в главната директория в .jar архива, който няма никакви поддиректории архивирани в него. След това трябва да се добави този .jar файл в CLASSPATH променливата на средата. Ако в TestResourceBundle.java се зарежда обект от тип ResourceBundel със следният код: ResourceBundle myBundleProps = ResourceBundle.getBundle( "package1.package2.package3.myBundleProps"); Тогава е нужно да се копира myBundleProps.properties в project_path/classes/package1/package2/package3. Като алтернатива, може...
Recent Comments