如何获取我的war文件的某个文件夹中的文件列表?

时间:2013-11-01 19:35:18

标签: java spring

我有一个Java项目(Spring)。我需要从文件夹“images”中获取图像列表,然后随机选择其中一个。我在war文件中获取此目录中的文件列表时遇到问题。我可以用什么课?以及如何设置我的文件夹的路径? 感谢您的帮助!

P.S。我使用的服务(不是控制器)应该从我的图像文件夹中给出一个随机图像的名称?它看起来像:

<body style="background: url(request.getContextPath() + RandomBackgroundService.getRandomBackground()) ...

我的服务看起来如何?

3 个答案:

答案 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()上的文档也可以帮助您。