有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java web处理程序中获得本地文件大小?

如何在web处理程序中获取本地文件长度

@RequestMapping(value = "xxx.iso", method = { RequestMethod.HEAD })
public void doChunkedHEAD(HttpServletResponse response) {

    try {
        URL fileUrl = servletContext.getResource(filename);
        File fileObj = new File(fileUrl.toString());
        long fileSize = fileObj.length();
        response.setHeader("Content-Length", String.valueOf(fileSize));

    } catch (Exception e) {

    }
}

fileSize总是0。而fileUrl是这样的:

file:/C:/xxx.iso

fileObj.exists()返回false。但该文件确实以C:\xxx.iso的形式存在

如果使用绝对局部路径,则可以获得大小:

@RequestMapping(value = "xxx.iso", method = { RequestMethod.HEAD })
public void doChunkedHEAD(HttpServletResponse response) {
    File fileObj = new File("C:\\xxx.iso");
    long fileSize = fileObj.length();
    response.setHeader("Content-Length", String.valueOf(fileSize));
}   

为什么

我使用的是Java 1.7.76


共 (1) 个答案

  1. # 1 楼答案

    我用下面的代码做到了:

    @RequestMapping(value = "xxx.iso", method = { RequestMethod.HEAD })
    public void doChunkedHEAD(HttpServletResponse response) {
    
        try {
            String localAppRootPath = servletContext.getRealPath("/");
            Path filePath = Paths.get(localAppRootPath, "xxx.iso");
            File fileObj = new File(filePath.toString());
            long fileSize = fileObj.length();
            response.setHeader("Content-Length", String.valueOf(fileSize));
        } catch (Exception e) {
    
        }
    }
    

    但我仍然不知道为什么我不能用URL来代替