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 ファイルは、Web アプリケーションを Tomcat にデプロイするために使用される単なる美化された zip ファイルです。デプロイされると、Tomcat は WAR ファイルを同じ名前 (.war拡張子なし) のディレクトリに解凍します。

アプリでrequest.getServletContext().getRealPath("/")は、WAR ファイルではなく、展開された webapp のルート ディレクトリへのパスを表します。(これが、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 に答える