Два наиболее распространенных способа доступа к свойствам в JavaScript - это точка и квадратные скобки. И value.x and value[x]
получают доступ к свойству по значению, но не обязательно к одному и тому же свойству. Разница заключается в том, как интерпретируется х. При использовании точки точка после точки должна быть допустимым именем переменной, и она непосредственно называет это свойство. При использовании квадратных скобок выражение между скобками оценивается для получения имени свойства. В то время как value.x получает свойство value с именем «x», значение [x] пытается оценить выражение x и использует результат как имя свойства.
Итак, если вы знаете, что интересующее вас свойство в называется «длина», вы говорите value.length
. Если вы хотите извлечь свойство, названное значением, хранящимся в переменной i
, вы скажете value[i]
. И поскольку имена свойств могут быть любой строкой, если вы хотите получить доступ к свойству с именем “2”
или “John Doe”
, вы должны использовать квадратные скобки: value[2] or value["John Doe"]
. Это возможно, даже если вы знаете точное имя свойства заранее, потому что ни “2” nor “John Doe”
не является допустимым именем переменной, и поэтому к нему нельзя получить доступ через точечную нотацию.
В случае массивов
Элементы массива хранятся в свойствах. Поскольку имена этих свойств являются числами, и нам часто нужно получить их имя от переменной, мы должны использовать синтаксис скобки для доступа к ним. Свойство length массива сообщает нам, сколько элементов оно содержит. Это имя свойства является допустимым именем переменной, и мы знаем его имя заранее, поэтому, чтобы найти длину массива, вы обычно пишете array.length
, потому что это легче записать, чем array["length"]
.
ClassLoader.getResourceAsStream()
.
Как указано в комментарии ниже, если вы находитесь в среде с несколькими ClassLoader
(например, модульное тестирование, webapps и т. д.), вам может понадобиться использовать Thread.currentThread().getContextClassLoader()
. См. http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 .
Это зависит от того, где именно находится файл XML. Это в папке с источниками (в «пакете по умолчанию» или «в корне») или в той же папке, что и класс?
In Для прежнего случая вы должны использовать «/file.xml
» (примечание ведущий косой чертой), чтобы найти файл, и не имеет значения, какой класс вы используете, чтобы попытаться найти его.
Если XML-файл находится рядом с некоторым классом, SomeClass.class.getResourceAsStream()
с только именем файла является путь.
ClassLoader.class.getResourceAsStream("/path/to/your/xml")
и убедитесь, что ваш скрипт компиляции скопирует XML-файл туда, где находится ваш CLASSPATH.
По умолчанию каждый ресурс, добавленный в путь к классам в веб-приложении, копируется в папку WEB-INF / classes в развернутой войне.
вы можете управлять этим при разработке приложение в eclipse через:
Щелкните правой кнопкой мыши проект -> свойства -> путь сборки Java -> вкладка источника -> папка с выходом по умолчанию
в вашем сервлете , вы можете получить доступ к ресурсу, предварительно указав свой путь на «/», который указывает на WEB-INF / classes .
Например, для доступа к pdf-sample .pdf в разделе WEB-INF / classes , вы можете использовать следующее:
getClass().getResourceAsStream("/pdf-sample.pdf")
В этом учебнике очень хорошо объясняется возможное способы чтения файла ресурсов из пути к классам в приложении Java, его стоит прочитать.
Я пробовал предлагаемое решение, и косая черта в имени файла не работала для меня, например: ... (). getResourceAsStream ("/ my.properties"); null был возвращен
Удаление слэша работало: .... getResourceAsStream ("my.properties");
Вот от doc API: перед делегированием из данного имени ресурса создается имя абсолютного ресурса с использованием этого алгоритма:
If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
Otherwise, the absolute name is of the following form:
modified_package_name/name
Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').
null
без /
. Добавление косой черты работало для меня. Должна быть какая-то другая разница между @ hussein-terek и моей настройкой и настройкой.
– Ajoy Bhatia
1 June 2018 в 20:13
ClassLoader.class.getResourceAsStream("/path/file.ext");
java.lang.NullPointerException: null
, а самый простой способ - new ClassPathResource("/path/to/your/file").getInputStream()
– zhuguowei
8 March 2018 в 12:12
Некоторые параметры «getResourceAsStream ()» в этом ответе не сработали для меня, но это было сделано:
SomeClassWithinYourSourceDir.class.getClassLoader (). getResourceAsStream ("yourResource"); / g1]
InputStream is = new ClassPathResource("/path/to/your/file").getInputStream()
– zhuguowei 8 March 2018 в 12:14