我在“协议”文件夹中包含多个文件。我想获取位于Java资源文件夹(src / main / resources / protocol / ...)内的'protocol'文件夹内的文件列表。
因此,当我尝试访问任何一个文件时,它在Eclipse IDE(使用main方法)以及wildfly部署中均能正常工作。它在文件内提供行。
List<String> files = IOUtils.readLines(classLoader.getResourceAsStream("protocol/protocol1.csv"));
但是当尝试读取文件夹时,它在eclipse IDE(获取文件名列表)中工作正常,但在wildfly部署中不起作用,它给出了空白列表[]。
List<String> files = IOUtils.readLines(classLoader.getResourceAsStream("protocol"));
我正在使用jboss wildfly服务器版本:9.0.1和Java版本“ 1.8.0_161”。
感谢您的帮助。
答案 0 :(得分:1)
找到了提取文件夹中所有文件的解决方案。
如果我们尝试通过getResource()方法访问文件夹,它将根据vfs协议返回,我们需要将其转换为
public List<String> loadFiles() throws IOException, Exception {
List<String> fileNames = new ArrayList<>();
URL resourceUrl = getClass().getResource("/protocol");
VirtualJarInputStream jarInputStream = (VirtualJarInputStream) resourceUrl.openStream();
JarEntry jarEntry = null;
while ((next = jarInputStream.getNextJarEntry()) != null) {
fileNames.add(jarEntry.getName());
}
return fileNames;
}
答案 1 :(得分:0)
类似的东西:
@RestController
public class StudentResource {
@GetMapping(path="/testing")
public void method(@RequestBody Student student,@Valid
@RequestHeader(value="Authorization") @Size(min=1) @NotBlank String auth)
{
System.out.println("Valid request");
}
}
它表明Path是File的更精细的概括。
它使用URL url = classLoader.getResourceAsStream("protocol");
Path dirPath = Paths.get(url.toURI());
Stream<Path> paths = Files.list(dirPath);
List<String> names = paths
.map(p -> p.getFileName().toString())
.collect(Collectors.toList());
协议(协议如http:)。