Java 8 Spring MVC - лучший способ читать файл в классе обслуживания

В приложении Java Spring MVC у меня есть текстовый файл в папке ресурсов, Каков наиболее эффективный способ чтения этого файла из класса обслуживания? Могу ли я прочитать этот файл, если разверну приложение как войну с AWS?

Resource resource = new ClassPathResource(fileLocationInClasspath);
InputStream resourceInputStream = resource.getInputStream();

или же

InputStream is = getClass().getResourceAsStream(fileLocationInClasspath);
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
209
3

Ответы 3

Вы можете использовать Загрузчик классов для получения файлов из папка обращения.

  ClassLoader classLoader = getClass().getClassLoader();
  File file = new File(classLoader.getResource(fileName).getFile());

    try (Scanner scanner = new Scanner(file)) {

    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        result.append(line).append("\n");
    }

    scanner.close();

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

Любой из них будет работать, и разница в производительности вряд ли будет значительной. Я ожидаю, что (под капотом) Spring API в первом фрагменте фактически делают то же самое, что и второй фрагмент. Следовательно, я предполагаю, что второй будет немного быстрее.

Эти два фрагмента кода на самом деле не читают файл. Скорее они открывают файл (в пути к классам) для чтения. Оба фрагмента поставляют InputStream, и фактическая производительность при чтении файла будет зависеть от того, как вы используете InputStream. (Это будет иметь большее значение для производительности, особенно если файл большой.)

I read this file if I deploy the application like a war on AWS?

Да.


1

@NasKehil - почему ты разместил свой код в качестве ответа? Это не ответ на ваш вопрос!

Stephen C 17.03.2018 01:35

Вот мой код на данный момент:

Resource resource = new ClassPathResource("/deals.txt");


public void getDealsFromFile() throws IOException {
   InputStream dfis = resource.getInputStream();

   try (BufferedReader brd = new BufferedReader(new 
                             InputStreamReader(dfis))) {
       String dline = brd.readLine();
       while (dline != null) {
         String dealFields[] = dline.split(";");

         Deal deal = new Deal();
         deal.setId(Integer.parseInt(dealFields[3]));
         deal.setDealNumber(dealFields[7]);
         deal.setAmount(Double.parseDouble(dealFields[8]));
         dline = brd.readLine();
       }
      brd.close();
   }
}  

1) Это не ответ на ваш вопрос. 2) Предполагая, что это попытка получить комментарии по эффективности кода ... а) было бы более эффективно использовать сканер, а не читать строки и разбивать их, б) если вы В самом деле заботитесь о производительности, используйте двоичное представление для данных.

Stephen C 17.03.2018 01:33

Другие вопросы по теме