получить CSV-файл из банки - PullRequest
       31

получить CSV-файл из банки

0 голосов
/ 25 декабря 2018

У меня есть следующая строка кода:

InputStreamReader isr = new InputStreamReader(MethodHandles.lookup().lookupClass().getResourceAsStream(csvFile));

Может кто-нибудь объяснить новичку:

MethodHandles.lookup()
lookupClass()
getResourceasStream()

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

Мне удалось упростить строку до:

InputStreamReader isr = new InputStreamReader (SQLUtilPROD.class.getResourceAsStream (csvFile));

, но я все еще в замешательстве.Что делает SQLUtilProd.class?и как getResourceAsStream узнает, как получить файл из фляги?Что произойдет, если у вас есть несколько банок?

Не уверен, но я думаю, что мы используем SQLUtil.class, чтобы получить объект класса, который, в свою очередь, дает нам доступ к classLoader, который getResourceAsStream использует для определения местоположения файла.

Если это так, где определяет classLoaderпуть, чтобы включить банку?

1 Ответ

0 голосов
/ 25 декабря 2018

Что делает SQLUtilProd.class?

Данные для каждого объекта содержат ссылку на объект класса java.lang.Class, который возвращается методом getClass.Существует также один объект java.lang.Class, описывающий java.lang.Class.Пожалуйста, прочитайте больше в этой ссылке.

как getResourceAsStream узнает, как получить файл из банки?

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

Что произойдет, если у вас несколько jar?

Вы можете получить все ресурсы с помощью вспомогательной функции, например:

public static List<InputStream> loadResources(
        final String name, final ClassLoader classLoader) throws IOException {
    final List<InputStream> list = new ArrayList<InputStream>();
    final Enumeration<URL> systemResources = 
            (classLoader == null ? ClassLoader.getSystemClassLoader() : classLoader)
            .getResources(name);
    while (systemResources.hasMoreElements()) {
        list.add(systemResources.nextElement().openStream());
    }
    return list;
}

Я уверен, что чтение этой ссылки поможет вам.

где classLoader определяет путь для включения фляги?

Система ClassLoader обеспечивает доступ к информации в CLASSPATH .CLASSPATH может содержать каталоги и файлы JAR.Таким образом, у вас есть доступ ко всем ресурсам вашего проекта и jar-файлам, которые находятся в пути к классам.

...