2016-11-13 5 views
4

Использование Java 8.Как читать файл, созданный во время выполнения?

В принципе, в модульном тесте (JUnit) У меня есть этот код:

callSomeCode(); 
assertTrue(new File(this.getClass().getResource("/img/dest/someImage.gif").getFile()).exists()); 

В callSomeCode(), у меня есть это:

InputStream is = bodyPart.getInputStream(); 
File f = new File("src/test/resources/img/dest/" + bodyPart.getFileName()); //filename being someImage.gif 
FileOutputStream fos = new FileOutputStream(f); 
byte[] buf = new byte[40096]; 
int bytesRead; 
while ((bytesRead = is.read(buf)) != -1) 
    fos.write(buf, 0, bytesRead); 
fos.close(); 

В первый раз тест выполняется, this.getClass().getResource("/img/dest/someImage.gif") возвращает null, хотя файл хорошо создан.

Во второй раз (когда файл уже был создан во время первого тестового прогона, а затем просто перезаписан), он не равен нулю, и тест проходит.

Как заставить его работать в первый раз?
Должен ли я настроить специальную настройку в IntelliJ для автоматического обновления папки, в которой создан файл?

Обратите внимание, что у меня есть эта базовая структура Maven:

--src 
----test 
------resources 
+1

http://stackoverflow.com/a/1011126/1587791 – nakano531

ответ

2

В комментарии по nakano531 указывает - ваша проблема не с файловой системой, но с пути к классам. Вы пытаетесь прочитать свой файл с помощью загрузчика классов, вызывая методы getClass().getResource(...), а не читать файл, используя классы, напрямую обращающиеся к файловой системе.

Например, если бы вы написали тест, как это:

callSomeCode(); 
File file = new File("src/test/resources/img/dest/someImage.gif"); 
assertTrue(file.exists()); 

Вы не имели бы проблемы у вас возникли в настоящее время.

Другой вариант заключается в реализации решения по ссылке, что nakano531 при условии: https://stackoverflow.com/a/1011126/1587791

+0

В самом деле, я бы даже сказал, очевидно. благодаря ;) – Mik378

Смежные вопросы