- PR -

JAVAでフォルダ内のbyte数を取得する方法は?

1
投稿者投稿内容
totomo
会議室デビュー日: 2002/01/07
投稿数: 7
投稿日時: 2002-01-07 17:56
現在、web上で使用するファイルマネージャー的なアプリケーションをservletで作成しています。それで、当然アップロードできる領域に制限を加えるようにしたいと考えたのですがそのフォルダが今、何メガ使用しているのかを知らなくてはいけません。フォルダが一つだけならその中にあるファイルのbyte数を全て足すだけでよかったのですが現在、新規フォルダ作成機能を追加したことでフォルダの中にフォルダを作れます。その為、byte数を足す動作に手を加えています。しかし、これがうまくいきません。JAVAのメソッドを調べてみましたが、一発でフォルダのbyte数を知ることができるメソッドは見つかりませんでした。
 今、行っているロジックは「フォルダ内でファイルかフォルダかを判別し、フォルダならその中を見る。ファイルならbyteを足す」というのを繰り返して行っているだけなのですが結果のbyte数が合わないのです。
 どうやら、どんどんフォルダの下層に行って戻ってくる時に足し忘れてしまうロジックバグではないかと思うのですが、確証はありません。また、この方法だとフォルダが多数あった場合の負荷が大きすぎることが予想されます。
 上記のやりかたよりスマートなやり方でフォルダのbyte数を知る方法がきっとあるはずなのですがどうにも思いつきません。良きアドバイスをよろしくお願いします。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-01-07 19:43
フォルダ情報の格納方式、ブロックサイズなど、rawなファイルシステムの情報を見なければ正確なことはわからないような気がしますが。そのあたりの情報はおそらく取れないので、決め打ちするしかないのではないでしょうか。

# システムコマンドやネイティブライブラリを呼び出すとかのが楽?:-b
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2002-01-08 11:14
ちょっと思い当たることがあるので一言。

使用環境はUnix・Linuxだと思いますが、byte数の確認のためにディレクトリの容量を調べるのにduコマンドを使用していますか?

コード:
$ echo HelloWorld > test.txt

とした後、
コード:
$ ls -l test.txt
-rw-r-----    1 user  user        12 Jan  8 10:49 test.txt

$ du -b test.txt
1024    test.txt


と言う風にlsとduの結果は違います。manページを読むとduは"du - estimate file space"とでていますので、duは正確な合計ファイルサイズではありません。duはそのファイルが使用しているディスクスペースを調べるので12バイトのファイルでも、ディスク上の1ブロック分(この場合1024バイト)のサイズになってしまうのではないでしょうか(間違ってたら本当の事を教えてくださいね)

java.io.Fileのlength()メソッドを使用すると正確なファイルサイズを返してきます。これはlsで求められる、ファイルの正確なサイズです。

duで求められるファイルの使用しているディスクスペースをjavaで求めるのは少し難しいかもしれません。プラットフォームの使用しているブロックサイズや、ファイルがどのようにディスク上に配置されているかで変わってしまうと思うので。しょむさんが言われるようにシステムコマンドを使用したほうが楽かも。
totomo
会議室デビュー日: 2002/01/07
投稿数: 7
投稿日時: 2002-01-09 11:01
アドバイスありがとうございます。

どうにか問題を解決することができました。

なかなか簡単にはいかないもんですねー
1

スキルアップ/キャリアアップ(JOB@IT)