- PR -

UNIX系OSのディスクの空き容量取得方法

1
投稿者投稿内容
and1
会議室デビュー日: 2007/05/27
投稿数: 13
投稿日時: 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/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-10-01 07:34
えっと、なんで中華??

ウィルスの恐れがあるので見に行きませんが。

command = "cmd.exe /c dir " + dirName;

の箇所を UNIX 命令に変更してもだめですか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-10-01 10:00
コードを見たら、単にディスク容量がわかるコマンドを実行して、
その結果を解析しているとわかりませんか?
該当のOS用にコマンドと解析方法を変えるだけですが。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2007-10-01 10:16
既存のコードはあまり流用できないかと思いますが、

「dir」の代わりに、UNIXのdfコマンドを用いると良いかと思います。

あとは、文字列のパースの問題だと思いますので、
1.4でもUNIXでも関係ないと思います。
and1
会議室デビュー日: 2007/05/27
投稿数: 13
投稿日時: 2007-10-05 23:32
朝日奈ありすさん
かつのりさん
あぶぽんさん
ご回答ありがとうございました。

いつも御礼が遅くなってすいません。
あぶぽんさんのおっしゃるとおり、dfコマンドを使うと
空きディスク容量が取得できました。
ありがとうございました。
1

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