Javaでフォルダのbyte数を知るには

このQ&Aのポイント
  • Javaでフォルダ内のbyte数を取得する方法について教えてください。
  • 現在、web上でファイルマネージャー的なアプリケーションをservletで作成しています。フォルダの中にフォルダを作成できるようにしたため、フォルダのbyte数を正確に取得することができません。
  • 現在のロジックでは、フォルダ内でファイルかフォルダかを判別し、フォルダならその中身を見て、ファイルならbyte数を足していますが、結果のbyte数が合わない問題があります。より効率的な方法やアドバイスを教えてください。
回答を見る
  • ベストアンサー

javaでフォルダのbyte数を知るには・・・

現在、web上で使用するファイルマネージャー的なアプリケーションをservletで作成しています。 それで、当然アップロードできる領域に制限を加えるようにしたいと考えたのですがそのフォルダ が今、何メガ使用しているのかを知らなくてはいけません。フォルダが一つだけならその中にある ファイルのbyte数を全て足すだけでよかったのですが現在、新規フォルダ作成機能を追加したことで フォルダの中にフォルダを作れるます。それでbyte数を足す動作に手を加えています。  しかし、これがうまくいっていません。 JAVAのメソッドを調べてみましたが、一発でフォルダのbyte数を知ることができるメソッドは見つかり ませんでした。  今、行っているロジックは 「フォルダ内でファイルかフォルダかを判別し、フォルダならその中を見る。ファイルならbyteを足す」 というのを繰り返して行っているだけなのですが結果のbyte数が合わないのです。 上記のやりかたよりスマートなやり方でフォルダのbyte数を知る方法がきっとあるはずなのですが どうにも思いつきません。 良きアドバイスをよろしくお願いします。

noname#4663
noname#4663
  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • aton
  • ベストアンサー率47% (160/334)
回答No.1

ファイルのサイズと,ファイルがディスク上で実際に占有する領域のサイズが一致していないために起きる現象ではないかと思います。 ふつう,ファイルシステムは固定長(4,8,16,32KBなど)の最小領域単位でディスク上の領域を管理します。従って,例えば最小領域サイズが4KBの場合,1バイトのファイルでも4000バイトのファイルでもディスク上では4KBを占有します。 ディスク上でファイルが実際に占有するサイズを取得するメソッドはJavaの標準APIには含まれていないようです。おそらく,プラットフォーム(ファイルシステムの種類や設定)に依存するからでしょう。 特定のフォルダ下のファイルサイズの総計を求めるのは,Javaの外側でやったほうがいいのではないかと思います。例えば,OSがUnix/Linuxなら,java.lang.Runtime#exec() を使って,duを実行して結果を取得するなどの方法があると思います。Windowsにdu相当のものがあるかどうかについては知りません。 あるいは,一般にアップロードするファイルのサイズが大きければ,上記の誤差は割合としては小さくなるので,思い切って無視してしまうという方法も考えられます。

noname#4663
質問者

お礼

アドバイスありがとうございます。 勉強になりました。 なんとか問題解決することができました。 また、いろいろ教えてください。

関連するQ&A

  • 共有フォルダの.javaファイルの編集とコンパイル

    Eclipseを使ってServletの作成をしています。 席から離れたサーバに.javaファイルや.classファイルがあるのですが自分の席のPCから編集、コンパイルをしたいです。 .javaファイルの編集に関してはWorkSpaceのあるフォルダを共有にすればできますが.classがサーバ内に出力されません。 どうしたらよいかご教授願いたいと思います。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaによるフォルダーのアップロード

    通常、Javaでファイルのアップロードを行う場合HTMLのINPUTタグ(Fileタイプ)でファイルを指定してからアップロードを行いますよね。これと同様のことをフォルダでやりたいんですが・・・。 もしできるのであればサンプルのページなんかを教えて頂けたらと・・・・。

  • フォルダ内のフォルダ数の制限ってありますか?

    教えてください。 フォルダ内に作成できるフォルダ数に制限はあるのですか? ルートディレクトリにファイルを作成できる数には制限があるというのは調べてわかりました。 例えば、 C:\A\1\ CドライブにAというフォルダを作成します。 そのAというフォルダの中に1というフォルダを作成します。 このAというフォルダの中に何個のフォルダを作成できるのでしょうか? 1から始まってどこまでできるのでしょうか? 知っている方いらっしゃいましたら教えてください。

  • javaで

    フォルダに AA.java, BB.java, CC.java, ‥という不特定多数のクラスがあって メソッドString name()を3つとも実装しているとします。 そのメソッドを呼ぶと、クラスの名前AAやBBが返戻地として返されるとします。いまこのフォルダにあるすべてのクラスの、このメソッドを よぶとします。クラスの数はいくつあるのかはわかりません。このメソッドをよんですべてのクラスの名前を取得するようにしたいです。 このようなプログラムをつくるにはどうすればいいのでしょうか?

  • Javaについて

    現在、JavaのjspやServletを使用して電たくを作っています。 計算処理などを組み込みたいのですが、その処理はpublic static void main()の下にコードを記述すればいいのですか??ちなみにpublic void 〇〇との違いはなんですか? あと、doGetメソッドのHttpServletRequestには計算処理などの条件分岐は書きませんよね?

  • Javaサーブレットを読み込んでくれません…

    現在、社内での新プロジェクトの為にJSPの研修を行っています。 開発環境 ・Windows2000 Service Pack 4 ・JDK 1.5.0_06 ・Tomcat 5.5.20 JDKとTomcatのインストールは正常に終了し、http://localhost:8080/は正常に見ることが出来ました。 その後、<Tomcat-Home>/webapps/ROOT/entryフォルダを作成し、 ・entry/WEB-INF/ ・entry/WEB-INF/classes/ 以上二つのフォルダを作成して、WEB-INFフォルダ直下にweb.xmlファイルを作成しています。 classesフォルダの中にHelloServlet.classを置き、web.xmlファイルの中身を書き換えてTomcatを再起動させてみたのですが、http://localhost:8080/entry/HelloServletとURLを打ってみても見ることが出来ません。 何か間違っているのか、設定不足なのか…教えていただければ幸いです、よろしくお願いいたします。 ************<web.xml>************ <web-app> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping> *********************************

    • ベストアンサー
    • Java
  • フォルダの数の上限

    レンタルサーバーを借りているのですが、そこには、フォルダの数の上限があります。それを超えると、スペースが残っていても、ファイルをアップロードできなくなってしまうのですが、どうして、このようにフォルダの数を制限するのか、どなたかわかりますでしょうか? サーバーのほうに聞く前に、ご意見を賜りたく――。

  • javaで大容量テキストファイルの読み込みについて

    お世話になっております。 現在javaにて大容量のテキストファイル(100M以上)を読み込んで、 特定の文字が含まれている行のみを別ファイルへ抽出するという プログラムを作成しています。 現在のロジックでは、 File file = new File( "読み込みファイル" ); byte[] b = new byte[ (int) file.length() ]; FileInputStream fis = new FileInputStream(file); fis.read(b); String str = new String(b, "Shift-JIS"); return str; 上記の様なのようなロジックのメソッドを作成し、 返り値の文字列を改行コードでsplitし、パターンマッチングして行を抽出する方法をとっています。 しかしこの方法だと、OutOfMemoryErrorが発生していまい、 30MB以上のファイルを読み込むことができません。 原因がJVMのメモリ領域の問題なのは理解していますが、 readLineをでためしてみると処理終了があまりにも遅すぎるため、 なるべく現在の手法を改良する方向で作成したいのですが、 一回目 :0 ~ 30000000byte まで 二回目 :30000001 ~ 60000000byte まで の様にJVMの設定はいじらない方法でファイルのデータを、 指定バイトから指定バイトまで読み込む方法等なないでしょうか? それ以外でも処理が早く、 大容量のテキストファイルを読み込む方法がありましたら、 そちらでも問題ありません。 ぜひとも知恵をお貸しください。 宜しくお願いします。

    • ベストアンサー
    • Java
  • フォルダー内のファイルの数をカウントしたい

    Win7とMS Officeの組合せで、別々の階層内にあるファイルの数を数えたいのですが。 具体的には「部署名」⇒「アルファベット、50音別」⇒「品種別」⇒「品質」というフォルダー構成が有って、その最下層の「品質」フォルダーの中にあるファイルの中で、ファイルの作成日の期間を指定して、品種別の「品種」フォルダーの中のファイルの数を知りたいのですが。 例えば”A123”という品種や”B123"という品種・・・・等々約300品種あって、各品種のフォルダーの中の「品質」というフォルダーの中に保存されている、2014年~2016年の間に作成されたファイルの数を知りたいのです。 具体的な結果としては、”A123"という品種の「品質」フォルダーの中のファイル数は10個、”B123"の「品質」フォルダーの中にはファイルが50個、・・・というように品種毎の「品質」フォルダーの中の(直近)3年間分のファイル数を知りたいのですが。 自分の常識、知識ではとても出来ないと思うのですが、何とかなれば非常にありがたいので質問させていただきます。

  • javaについて

    javaのServletやjsp、xml等を使用して電たくを作りたいのですが、その際に電たくの外見はjavaの中のどこに表示されるのではなく、webページを開いたら表示されるという認識で合ってますか?

    • ベストアンサー
    • Java

専門家に質問してみよう