Как загрузить пакет ресурса из ресурса файла в Java?

В ОО-языках, таких как Object Pascal или C ++, «метод» - это функция, связанная с объектом. Так, например, объект «Собака» может иметь функцию «кора», и это будет считаться «Методом». Напротив, функция «StrLen» стоит отдельно (она предоставляет длину строки, предоставленной в качестве аргумента). Таким образом, это просто «функция». Javascript также технически объектно-ориентирован, но сталкивается со многими ограничениями по сравнению с полноценным языком, таким как C ++, C # или Pascal. Тем не менее, это различие должно сохраняться.

Пара дополнительных фактов: C # полностью объектно-ориентирован, поэтому вы не можете создавать автономные «функции». В C # каждая функция связана с объектом и, таким образом, технически является «методом». Главное, что в C # мало кто называет их «методами» - они просто используют термин «функции», потому что не нужно проводить никаких различий.

Наконец, точно так же, как и все гуру Паскаля, не прыгайте на меня здесь. Паскаль также различает «функции» (которые возвращают значение) и «процедуры», которые этого не делают. C # не делает этого различия явно, хотя вы, конечно, можете выбрать возвращать значение или нет.

47
задан Jared Harley 22 January 2013 в 18:30
поделиться

4 ответа

Я думаю, что вы хотите, чтобы родительский файл был включен путь к классам, а не сам файл.

Попробуйте это (может потребоваться небольшая настройка):

String path = "c:/temp/mybundle.txt";
java.io.File fl = new java.io.File(path);

try {
   resourceURL = fl.getParentFile().toURL();
} catch (MalformedURLException e) {
   e.printStackTrace();                     
}               

URLClassLoader urlLoader = new URLClassLoader(new java.net.URL[]{resourceURL});
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("mybundle.txt", 
                java.util.Locale.getDefault(), urlLoader );
0
ответ дан 26 November 2019 в 19:15
поделиться

Из JavaDocs для ResourceBundle.getBundle (String baseName) :

baseName - базовое имя набор ресурсов, полностью квалифицированный имя класса

На простом английском языке это означает, что пакет ресурсов должен находиться в пути к классам и что baseName должен быть пакетом, содержащим пакет плюс имя пакета, mybundle в в вашем случае.

Не указывайте расширение и любую локаль, которая является частью имени пакета, JVM отсортирует это для вас в соответствии с локалью по умолчанию - см. документацию на java.util.ResourceBundle для получения дополнительной информации информация.

11
ответ дан 26 November 2019 в 19:15
поделиться

Когда вы говорите, что это «действительный пакет ресурсов» - это набор ресурсов свойств? Если так, то, вероятно, самый простой способ загрузки:

try (FileInputStream fis = new FileInputStream("c:/temp/mybundle.txt")) {
  return new PropertyResourceBundle(fis);
}
44
ответ дан 26 November 2019 в 19:15
поделиться

1) Измените расширение на свойства (например, .mybundle.properties.)
2) Поместите файл в банку и добавьте его в путь к классам.
3) Получите доступ к свойствам с помощью этого кода:

ResourceBundle rb = ResourceBundle.getBundle("mybundle");
String propertyValue = rb.getString("key");
21
ответ дан 26 November 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: