2014-08-29 3 views
0

Я переписываю свои классы, которые загружают ресурсы внутри моей игры. Мой профессор сказал, что мы стараемся не использовать знак «/» в нашем Strings/File/URL при загрузке наших ресурсов. Я использую Classname.class.getResource(someString), чтобы получить URL-адреса, чтобы я мог загружать мои ресурсы, которые отлично работают (см. Код ниже). Я прочитал Oracle Docs для class.getResource(), и там мне нужно использовать "/". Я хотел бы узнать, есть ли лучший способ для загрузки ресурсов (изображения и аудиофайлы в основном), чем использование ClassName.class.getResource()? У меня нет требований к скорости или памяти. Вот пример того, как я загружаю BufferedImage.Java Загрузка ресурсов (изображений, аудио, текстовых файлов и т. Д.) Без использования знака «/» из-за проблем с переносимостью и использования File.separator

try { 
     // Example path = "/menu/background2.png" 
     sourceImage = ImageIO.read(ResourceManager.class.getResource(path)); 


    } catch (IOException e) { 
     System.out.println("Failed to load: " + path); 

     e.printStackTrace(); 

    } 
+1

Это рекомендуемый способ. – icza

+1

При загрузке ресурсов вы должны использовать '/', поскольку это часть требований URL. В системах Windows пути к файлам с '/' автоматически преобразуются в «\», но «\» автоматически не преобразуется в * nix-системах. Для путей к файлам вы должны, по возможности, использовать «File.pathSeparator», но, как я уже сказал, это не требуется – MadProgrammer

ответ

1

Вы можете использовать косые черты в пути, но не обратную косую черту, потому что вы не используете путь к файлу, а не путь в пути к классам. Не используйте ведущую косую черту, если вы хотите относительный путь от класса. Когда вы используете путь к файлу, вы можете использовать File.separator в пути, однако в URL-адресах вы все равно можете использовать косую черту. Использование более чем File.separator неверно в URL-адресах, поскольку оно не будет работать в системах Windows, для которых требуется использовать символ обратной косой черты для использования в URL-адресе.

1

I read the Oracle Docs for class.getResource() and there I have to use "/" Очевидно, что вы должны использовать / для окон или \ для Linux, как файловый разделитель. Разделитель файлов используется для навигации по каталогу.

Предположим, у вас есть файл внутри mydirectory/filename, и вы сохранили его под папкой resources вашего проекта. Способ читать это будет либо

URL url = className.class.getClassLoader().getResource("/mydirectory/filename"); 

или

InputStream is = className.class.getClassLoader() 
           .getResourceAsStream("/mydirectory/filename"); 

Или

URL url = Thread.currentThread().getContextClassLoader() 
           .getResource("/mydirectory/filename"); 

Или

InputStream is = Thread.currentThread().getContextClassLoader() 
            .getResourceAsStream("/mydirectory/filename"); 

/будет использоваться для просмотра внутри каталогов.