java – 如何读取在运行时创建的文件?

使用
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   

最佳答案 正如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

点赞