- - PR -
UNIX系OSのディスクの空き容量取得方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-10-01 05:02
お世話になっております。
and1です。 以下の参考URLでwindowsのディスクの空き容量を 取得するクラスを見つけたのですが、 これを応用してUNIX系OSのディスク空き容量を取得するプログラムを 作成することは可能でしょうか? もし可能であれば、その方法を教えていただけないでしょうか? ちなみに自分が使っているOSは「FreeBSD 6-stable」です。(レンタルサーバーです。) 参考URL: http://www.kpwang.com/pc/view_e.jsp?board_id=1&article_id=1107916173815 J2SDK6ではFileクラスにそのようなメソッドが存在するみたいですが、 J2SDK1.4でできる方法を教えていただきたいです。 参考URLのソースをそのままコピーしてもうまくコンパイル&実行 ができないと思いますので、自分が編集したソースを記載しておきました。 参考にしてください。(一部文字化けしています。) よろしくお願いします。 ===============編集したソース================ import java.io.BufferedReader; import java.io.InputStreamReader; /* * Determine free disk space for a given directory by * Parsing the output of the dir command. * This class is inspired by the code at * Works under Windows only under certain circumstances. * Yes, it's that shaky. * Requires Java 1.4 or higher. * @ [EMAIL PROTECTED] * Marco Schmidt */ public class Diskspace { public Diskspace () { // Prevent instantiation of this class } /** * Return available free disk space for a directory. * @ [EMAIL PROTECTED] DirName name of the directory * @ [EMAIL PROTECTED] Free disk space in bytes or -1 if unknown */ public static long getFreeDiskSpace (String dirName) { try { // Guess correct 'dir' command by looking at the // Operating system name String os = System.getProperty ("os.name"); String command; if (os.equals ( "Windows NT") || os.equals ( "Windows XP")) { //command = "cmd.exe / c dir" + dirName; command = "cmd.exe /c dir " + dirName; } else { command = "command.com /c dir" + dirName; } // Run the dir command on the argument directory name Runtime runtime = Runtime.getRuntime(); Process process = null; process = runtime.exec (command); if (process == null) { return -1; } // Read the output of the dir command // Only the last line is of interest BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; String freeSpace = null; int mycnt = 0 ; while ((line = in.readLine()) != null) { freeSpace = line; //mycnt++; } if (freeSpace == null) { return -1; } process.destroy (); //Remove dots & commas & leading and trailing whitespace freeSpace = freeSpace.trim(); freeSpace = freeSpace.replaceAll("\\\\\\\\\\\\\\\\." ,""); freeSpace = freeSpace.replaceAll(",",""); String items[] = freeSpace.split(" "); // The first valid numeric value in items after (!) Index 0 // Is probably the free disk space int index = 1; while(index <= items.length) { try { long bytes = Long.parseLong (items[index++]); //return bytes.longValue(); return bytes; } catch (NumberFormatException nfe) { } } return -1; } catch (Exception exception) { System.err.println(exception); return -1; } } } |
|
投稿日時: 2007-10-01 07:34
えっと、なんで中華??
ウィルスの恐れがあるので見に行きませんが。 command = "cmd.exe /c dir " + dirName; の箇所を UNIX 命令に変更してもだめですか? |
|
投稿日時: 2007-10-01 10:00
コードを見たら、単にディスク容量がわかるコマンドを実行して、
その結果を解析しているとわかりませんか? 該当のOS用にコマンドと解析方法を変えるだけですが。 |
|
投稿日時: 2007-10-01 10:16
既存のコードはあまり流用できないかと思いますが、
「dir」の代わりに、UNIXのdfコマンドを用いると良いかと思います。 あとは、文字列のパースの問題だと思いますので、 1.4でもUNIXでも関係ないと思います。 |
|
投稿日時: 2007-10-05 23:32
朝日奈ありすさん
かつのりさん あぶぽんさん ご回答ありがとうございました。 いつも御礼が遅くなってすいません。 あぶぽんさんのおっしゃるとおり、dfコマンドを使うと 空きディスク容量が取得できました。 ありがとうございました。 |
1