В приложении Java Spring MVC у меня есть текстовый файл в папке ресурсов, Каков наиболее эффективный способ чтения этого файла из класса обслуживания? Могу ли я прочитать этот файл, если разверну приложение как войну с AWS?
Resource resource = new ClassPathResource(fileLocationInClasspath);
InputStream resourceInputStream = resource.getInputStream();
или же
InputStream is = getClass().getResourceAsStream(fileLocationInClasspath);




Вы можете использовать Загрузчик классов для получения файлов из папка обращения.
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
Вот мой код на данный момент:
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) Предполагая, что это попытка получить комментарии по эффективности кода ... а) было бы более эффективно использовать сканер, а не читать строки и разбивать их, б) если вы В самом деле заботитесь о производительности, используйте двоичное представление для данных.
@NasKehil - почему ты разместил свой код в качестве ответа? Это не ответ на ваш вопрос!