Как получить доступ к файлам в каталоге ресурсов в моем проекте веб-службы Maven? - PullRequest
0 голосов
/ 29 апреля 2019

Мой веб-сервис Maven имеет следующую базовую структуру:

MyWebService\
|-- src\
|   |-- main\
|   |   |-- java\
|   |   `-- resources\
|   |       `-- csvfiles\
|   |           `-- data.csv
|   `-- test\
`-- target\
    |-- classes\
    `-- test-classes\

Я пытаюсь получить доступ к файлам .csv в подкаталоге csvfiles моего подкаталога resources.

У меня есть класс с этим кодом:

public class ReadCSVFiles {
    public void read(){
        String separator = System.getProperty("file.separator");
        ClassLoader cl = ReadCSVFiles.class.getClassLoader();
        URL url = cl.getResource(separator + "src" + separator + "main" + separator + "resources" + separator + "csvfiles" + "data.csv");
        url.toString();
    }
}

Путь заканчивается:

\src\main\resources\csvfiles\data.csv

Я тоже пробовал этот путь:

src\main\resources\csvfiles\data.csv

Всякий раз, когда я запускаю свое приложение, я всегда получаю NullPointerException в строке url.toString().

Итак, как мне получить доступ к этим файлам данных .csv?

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Если вы используете загрузчик классов для получения ресурса в classpath (папке ресурсов), просто используйте относительный путь:

ReadCSVFiles.class.getClassLoader().getResource("csvfiles/data.csv");

Javadoc

0 голосов
/ 29 апреля 2019

Прежде всего, я не уверен, почему вы хотите напечатать URL-адрес здесь, classLoader.getResource взял ваш каталог ресурсов в качестве корня здесь.Если вы хотите прочитать CSV и выполнить какое-то действие с этим файлом, тогда непосредственно прочитайте файл, используя InputStream.

Как показано ниже

public class ReadCSVFiles {
public void read(){
    String separator = System.getProperty("file.separator");
    ClassLoader cl = ReadCSVFiles.class.getClassLoader();
     try (InputStream inputStream = cl.getResourceAsStream("csvfiles/data.csv")) {

        InputStreamReader streamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
        BufferedReader reader = new BufferedReader(streamReader);
       for (String line; (line = reader.readLine()) != null;) {
          // Process line
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

Или если вам нужно получить URLа затем загрузить файл через URL, вы можете попробовать что-то вроде ниже

URL url = cl.getResource("csvfiles/data.csv");
Path path = Paths.get(url.toURI());
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...