我有一个Java项目(Spring)。我需要从文件夹“images”中获取图像列表,然后随机选择其中一个。我在war文件中获取此目录中的文件列表时遇到问题。我可以用什么课?以及如何设置我的文件夹的路径? 感谢您的帮助!
P.S。我使用的服务(不是控制器)应该从我的图像文件夹中给出一个随机图像的名称?它看起来像:
<body style="background: url(request.getContextPath() + RandomBackgroundService.getRandomBackground()) ...
我的服务看起来如何?
答案 0 :(得分:2)
您可以从ServletContext.getResourcePaths()获取列表 - 只需将引用自动装入您的控制器并询问正确的文件夹 -
@Controller
@RequestMapping("/whatever")
public class MyClass {
@Autowired
private final ServletContext context;
@RequestMapping(method = RequestMethod.GET)
public String get(ModelMap model) {
Random rand = new Random();
List<String> images = new ArrayList<String>(context.getResourcePaths("/images"));
model.addAttribute("randomImage", images.get(rand.nextInt(images.size())));
return "myPage";
}
}
答案 1 :(得分:0)
首先,忽略“目标”目录。它就是maven放置它处理结果的地方。
如果你需要在运行时从WAR文件目录中检索数据,我会使用类似的东西:
for (String s : req.getServletContext().getResourcePaths("images")) {
InputStream resource = req.getServletContext.getResourceAsStream(s);
// do something with resource
}
答案 2 :(得分:0)
如果您尝试从类中访问images目录,这应该有效:
File imagesFolder = MyClass.getResource("images").getFile();
for (File image : imagesFolder.listFiles()) {
// TODO: Figure out your random logic.
}
在确定如何访问应用程序中的资源时,阅读Class.getResource()
上的文档也可以帮助您。