2

我想获得在我的服务器上运行的 WAR 文件的大小。我试过谷歌搜索如何做到这一点,但我没有任何运气。如果我尝试 File.length(),它会返回 0(不是很有帮助)。

我注意到当我这样做时request.getServletContext().getRealPath("/"),它会返回:

C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\nameofmyapp\

有什么方法可以使用此路径来查找已部署的 WAR 文件的大小?谢谢。

4

4 回答 4

2

WAR 文件只是一个美化的 zip 文件,用于将 webapp 部署到 Tomcat。部署后,Tomcat 将 WAR 文件解压缩到同名目录(无.war扩展名)。

在您的应用程序中,request.getServletContext().getRealPath("/")表示解压后的 web 应用程序的根目录的路径,而不是 WAR 文件。(这可能是您的File.length调用返回 0的原因——javadoc说目录的长度未定义。)要获取 WAR 文件的路径和大小,请去掉尾部斜杠并添加.war扩展名:

File webappPath = new File(request.getServletContext().getRealPath("/"));
File warFile = new File(webappPath.getParent(), webappPath.getName() + ".war");
int warSize = warFile.length();
于 2013-03-12T16:09:08.463 回答
0

你可以试试这个:

File file = new File("C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/nameofmyapp.war");
if (file.exists()) {
    double bytes = file.length();
    double kiloBytes = (bytes / 1024);
    double megaBytes = (kiloBytes / 1024);
    double gigaBytes = (megaBytes / 1024);
    double teraBytes = (gigaBytes / 1024);
    double petaBytes = (teraBytes / 1024);
    double exaBytes = (petaBytes / 1024);
    double zettaBytes = (exaBytes / 1024);
    double yottaBytes = (zettaBytes / 1024);

    System.out.println("File Size: " + bytes + " B");
    System.out.println("File Size: " + kiloBytes + " KB");
    System.out.println("File Size: " + megaBytes + " MB");
    System.out.println("File Size: " + gigaBytes + " GB");
    System.out.println("File Size: " + teraBytes + " TB");
    System.out.println("File Size: " + petaBytes + " PB");
    System.out.println("File Size: " + exaBytes + " EB");
    System.out.println("File Size: " + zettaBytes + " ZB");
    System.out.println("File Size: " + yottaBytes + " YB");
} else {
    System.out.println("Oops!! File does not exists!");
}
于 2013-03-12T16:08:30.407 回答
0
File file = new File(""C:/Program Files/Apache Software Foundation/Tomcat6.0/webapps/myapp.war"");
                long filesize = file.length();
于 2013-03-12T16:12:03.190 回答
0

谢谢你们的建议。他们工作,但他们返回 WAR 本身的文件大小(WAR 文件大约 24 MB,它返回 4096 字节)。

无论如何,这是最终起作用的代码:

@Autowired
ServletContext context;  //because Tomcat 6 needs to have ServletContext autowired

String strWebAppName = context.getRealPath("/");
String strWarFile = new File(strWebAppName).getParent() + "/myappname.war";
File fileMyApp = new File(strWarFile);
long fileSize = 0;
if(fileMyApp.exists())
{
    fileSize = fileMyApp.length();
}

它返回 24671122 个字节。谢谢你们的帮助。

编辑:刚刚看到你的帖子马茨。几乎正是我得到的。谢谢你=)。

于 2013-03-12T20:09:32.547 回答