Разрабатывайте решение в соответствии с вашими желаниями ...
Есть две вещи, которые getResource
/ getResourceAsStream()
получат от класса, для которого он вызывается ...
- Загрузчик классов
- Начальное местоположение
Так что если вы сделаете
this.getClass().getResource("foo.txt");
, он попытается загрузить foo.txt из того же пакетакак класс "this" и с загрузчиком классов класса "this".Если вы ставите «/» впереди, то вы абсолютно ссылаетесь на ресурс.
this.getClass().getResource("/x/y/z/foo.txt")
загрузит ресурс из загрузчика классов «this» и из пакета xyz (он должен быть втот же каталог, что и классы в этом пакете).
Thread.currentThread().getContextClassLoader().getResource(name)
будет загружаться с загрузчиком классов контекста, но не будет разрешать имя в соответствии с каким-либо пакетом (на него должна быть абсолютная ссылка)
System.class.getResource(name)
Загрузит ресурс с помощью загрузчика системного класса (на него также нужно будет ссылаться абсолютно, так как вы не сможете ничего поместить в пакет java.lang (пакет System).
Просто посмотрите на источник. Также указывает, что getResourceAsStream просто вызывает «openStream» для URL-адреса, возвращенного из getResource, и возвращает его.