- PR -

選択ディレクトリの容量表示方法が分かりません。。。

投稿者投稿内容
IB
会議室デビュー日: 2005/09/03
投稿数: 18
お住まい・勤務地: 神奈川
投稿日時: 2005-09-03 11:26
おはようございます。

ディレクトリを指定してその容量(サイズ)を表示させたいのですが・・・。
やり方がわかりません・・・。
FileクラスやSystemクラスではないのでしょうか!?

どなたか教えていただけないでしょうか。
ご返答お待ちしてます。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-03 13:14
にた話題が以前ありました。
参考になるでしょうか。できなさそう、て結論になってます。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=14453&forum=12
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2005-09-03 13:34
未記入さんの言っている「ディレクトリを指定してその容量」の定義は
どんなですか?
「ディレクトリ配下に含まれるファイルの長さの総和」だとしたら、
File#list() でリストを取得して File#length() を足していったら
できますね。再帰的に呼び出せばサブディレクトリも含んだサイズを
求められますね。

インギさんのポインタはデバイスの(空き)容量の話ですね。
IB
会議室デビュー日: 2005/09/03
投稿数: 18
お住まい・勤務地: 神奈川
投稿日時: 2005-09-03 13:56
インギさん、Java僧さんへ
ご返信ありがとうございます。
すみません、私の語彙不足でした。

データをバックアップする際に、対象階層の残容量表示を試みています。
「パスで指定したディレクトリが属する、ルートドライブ容量」を
取得できれば、そこからJava僧さんから教えて頂いた
「File#list() でリストを取得して File#length()」の方法で使用容量を引いて、
残容量を求められるのですが・・・。

インギさんのご返信によると、出来なさそうですね。。。
ともみさんの「動作プラットフォーム毎の外部コマンドを実行して、
その出力情報を抜き出す方法」しか存在しないのであれば、それを試して
みたいのですが。どのような方法なのか、良く分かりません。

度々すみません、ご存知でしたら、教えて頂きたいです。
宜しくお願い致します。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-03 14:04
Java の動作する OS はたくさんありますので、まず対象としているプラットフォームを挙げてはいかがでしょうか。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-09-03 14:18
単純にファイルのサイズを測っても、
実際にはファイルアロケーションユニットが存在しますので、
バックアップを目的とするなら、単純な合計値では無理でしょう。

例えば、Windows/FAT32の場合8Gまでのディスク容量なら4KBが最低単位になります。
1KBのファイル2つで8KB消費されます。

また、ディスク容量やファイルアロケーションユニットのサイズを
測る機能はJavaにはありませんので、

・バックアップを実行
・失敗を判定(IO例外)
・失敗ならバックアップを削除

という流れで処理するのが現実的でしょう。
IB
会議室デビュー日: 2005/09/03
投稿数: 18
お住まい・勤務地: 神奈川
投稿日時: 2005-09-03 14:56
インギさん、かつのりさんへ
ご返信ありがとうございます。
今回、対象としているプラットフォームOSは、Windows系(2K,XP)です。

1.それらを「外部コマンドを実行してその出力情報(ルートドライブ容量)を取得」
2.そこから「File#list() でリストを取得後 File#length()」で使用容量を引いて、大体の残容量を求める
3.かつのりさんの言う通り「例外処理」を盛り込んだ処理を記述。
という流れでしょうか!?

1.は、どのような「外部コマンド」を記述すれば良いのでしょうか!?
教えて頂きたいです。 宜しくお願い致します。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-09-03 15:42
対象のプラットフォームに対してコピーした際の正確な容量がわからない以上、
容量を測らないでコピーすればいいだけだと思います。

外部コマンドで調べるにしても、スパンボリュームや仮想ドライブなどの
考慮も必要ではないでしょうか。

Windowsの操作でファイルのコピーを行う時に、
エラーが出てくるまでコピーを行っていますよね。
そんな感じで充分だと思いますが。

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