- 浏览: 195563 次
- 性别:
- 来自: 北京
最新评论
-
zeroliu:
测试评论。。。
UMP编程比赛:封装TCP连接池和DAL客户端接口库。(7.27更新) -
zeroliu:
新的代码,有一个平滑压缩的处理,还有变灰的处理。
impor ...
Java小程序:批量图片处理(缩小和添加Logo) -
小冰糕:
kenter1643 写道前几天我也在弄串口通讯,也是得到空的 ...
学习笔记:Java串口编程(短信Modem). -
salever:
不错,
学习笔记:Java串口编程(短信Modem). -
zeroliu:
我发现本帖,在blog栏目已经找不到了,搜索也不行,不知道什么 ...
反编译android应用,降低权限反吸费和隐藏广告,重新打包和签名【原创】
原来发布在Blog上的:http://zeroliu.blogdriver.com/zeroliu/1221778.html
【虎.无名】最近封装JMX的MBean,有一个监控磁盘空间的需求。在网上找遍了,列出了3种方法,第1种只能windows系统,第2种就不用说了,需要一个扩展库。至于用JNI则就没必要了。最新的jdk6.0有相应的方法,其它版本还没有,研究了一下方法一和方法二,主要原理就是:通过java中的Process类来调用外部命令,如dir、ls、df -k、du等,然后捕获其标准输出,从而获取所需数据。具体代码如下。。。
方法一:执行外部命令dir/df,然后捕获输出,分析输出获取所需数据。
原始代码地址:http://www.jr163.org/cup2/36/36934.htm
【虎.无名】原始代码存在缺陷,未处理win xp,而且不支持unix等操作系统;经过修改后的代码见附录。
方法二:使用Jconfig,可以跨平台
从http://www.tolstoy.com/samizdat/jconfig.html上下载jconfig。
下载的包的sample里有很简单的例子,如果是要得到磁盘空间的话:
用FileRegistry.getVolumes()得到DiskVolume。
然后call getFreeSpace()和getMaxCapacity()。
就是这么简单。
方法三:使用jni技术 【虎.无名】针对需求而言太复杂,也无法移植,不建议使用。
这个是解决所有和os相关的操作的万能利器了。
例子我也懒得写了。
写一个dll然后call之即可。
http://tolstoy.com/samizdat/jconfig.html
What is it?
JConfig is a cross-platform library that supplements the core Java API and solves many programming tasks.
It lets you work with files, web browsers, processes, file types, and other system-level items in a much more advanced manner than that provided by the standard Java class libraries. For instance, you can use it to launch web browsers or other external applications instead of using Runtime.exec or solutions that only work on one platform.
JConfig is similar to some of the Microsoft extensions to Java, except: it's completely cross-platform! JConfig runs on Windows, Mac, Unix, and other platforms to come.
The download even includes the complete source code!
See how JConfig compares with the standard Java API.
What can I do with it?
Here's a partial list, by category:
Files: Enumerate the user's disk drives, and obtain extended information on files, directories, volumes, and filesystems: their icons, creation dates, version information, mount points, and much more...
Web Browsers: Launch a file or URL in the user's Web browser...
Video Monitors: Enumerate and get information on the user's video monitors: bit depth, bounds, etc...
External Processes: Create external processes, send basic commands to external processes, obtain the PSN or HWND of a process you created, and enumerate the currently running processes...
File Types: Find applications associated with a given file type, find applications by name, and convert between Windows file extensions and Mac creator/file type codes...
--------
【虎.无名】修改后的DiskSpace代码及测试。
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
这些import内容在Eclipse中是可以自动导入的,一般源代码为了精简,都不需要含这些内容。
这已经是完整的代码,main()中就是测试用例;至于UtilLog仅仅是配置log4j日志而已,可以不用,把log4j.properites直接放在运行路径就可,或者用System.out.println替代。
保持和BlogDriver的一致
【虎.无名】最近封装JMX的MBean,有一个监控磁盘空间的需求。在网上找遍了,列出了3种方法,第1种只能windows系统,第2种就不用说了,需要一个扩展库。至于用JNI则就没必要了。最新的jdk6.0有相应的方法,其它版本还没有,研究了一下方法一和方法二,主要原理就是:通过java中的Process类来调用外部命令,如dir、ls、df -k、du等,然后捕获其标准输出,从而获取所需数据。具体代码如下。。。
方法一:执行外部命令dir/df,然后捕获输出,分析输出获取所需数据。
原始代码地址:http://www.jr163.org/cup2/36/36934.htm
【虎.无名】原始代码存在缺陷,未处理win xp,而且不支持unix等操作系统;经过修改后的代码见附录。
方法二:使用Jconfig,可以跨平台
从http://www.tolstoy.com/samizdat/jconfig.html上下载jconfig。
下载的包的sample里有很简单的例子,如果是要得到磁盘空间的话:
用FileRegistry.getVolumes()得到DiskVolume。
然后call getFreeSpace()和getMaxCapacity()。
就是这么简单。
方法三:使用jni技术 【虎.无名】针对需求而言太复杂,也无法移植,不建议使用。
这个是解决所有和os相关的操作的万能利器了。
例子我也懒得写了。
写一个dll然后call之即可。
http://tolstoy.com/samizdat/jconfig.html
What is it?
JConfig is a cross-platform library that supplements the core Java API and solves many programming tasks.
It lets you work with files, web browsers, processes, file types, and other system-level items in a much more advanced manner than that provided by the standard Java class libraries. For instance, you can use it to launch web browsers or other external applications instead of using Runtime.exec or solutions that only work on one platform.
JConfig is similar to some of the Microsoft extensions to Java, except: it's completely cross-platform! JConfig runs on Windows, Mac, Unix, and other platforms to come.
The download even includes the complete source code!
See how JConfig compares with the standard Java API.
What can I do with it?
Here's a partial list, by category:
Files: Enumerate the user's disk drives, and obtain extended information on files, directories, volumes, and filesystems: their icons, creation dates, version information, mount points, and much more...
Web Browsers: Launch a file or URL in the user's Web browser...
Video Monitors: Enumerate and get information on the user's video monitors: bit depth, bounds, etc...
External Processes: Create external processes, send basic commands to external processes, obtain the PSN or HWND of a process you created, and enumerate the currently running processes...
File Types: Find applications associated with a given file type, find applications by name, and convert between Windows file extensions and Mac creator/file type codes...
--------
【虎.无名】修改后的DiskSpace代码及测试。
public class DiskSpace { public static final String CRLF = System.getProperty("line.separator"); public static final int OS_Unknown = 0; public static final int OS_WinNT = 1; public static final int OS_Win9x = 2; public static final int OS_Linux = 3; public static final int OS_Unix = 4; private static Log _log = LogFactory.getLog(DiskSpace.class); private static String _os = System.getProperty("os.name"); protected static String os_exec(String[] cmds) { int ret = 0; Process porc = null; InputStream perr = null, pin = null; StringBuffer sb = new StringBuffer(); String line = null; BufferedReader br = null; try { // for(int i=0; i porc = Runtime.getRuntime().exec(cmds);//执行编译操作 // porc = Runtime.getRuntime().exec(cmds, null, null); perr = porc.getErrorStream(); pin = porc.getInputStream(); //获取屏幕输出显示 //while((c=pin.read())!=-1) sb.append((char) c); br = new BufferedReader(new InputStreamReader(pin)); while((line=br.readLine())!=null) { // System.out.println("exec()O: "+line); sb.append(line).append(CRLF); } //获取错误输出显示 br = new BufferedReader(new InputStreamReader(perr)); while((line=br.readLine())!=null) { System.err.println("exec()E: "+line); } porc.waitFor(); //等待编译完成 ret = porc.exitValue(); //检查javac错误代码 if (ret!=0) { _log.warn("porc.exitValue() = "+ret); } }catch(Exception e) { _log.warn("exec() "+e, e); }finally { porc.destroy(); } return sb.toString(); } protected static int os_type() { //_log.debug("os.name = "+os); //Windows XP String os = _os.toUpperCase(); if (os.startsWith("WINDOWS")) { if (os.endsWith("NT") || os.endsWith("2000") || os.endsWith("XP")) return OS_WinNT; else return OS_Win9x; }else if (os.indexOf("LINUX")>0) return OS_Linux; else if (os.indexOf("UX")>0) return OS_Unix; else return OS_Unknown; } protected static long os_freesize(String dirName) { String[] cmds = null; long freeSize = -1; int osType = os_type(); switch(osType) { case OS_WinNT: cmds = new String[]{"cmd.exe", "/c", "dir", dirName}; freeSize = os_freesize_win(os_exec(cmds)); break; case OS_Win9x: cmds = new String[]{"command.exe", "/c", "dir", dirName}; freeSize = os_freesize_win(os_exec(cmds)); break; case OS_Linux: case OS_Unix: cmds = new String[]{"df", dirName}; freeSize = os_freesize_unix(os_exec(cmds)); break; default: } return freeSize; } protected static String[] os_split(String s) { // _log.debug("os_split() "+s); String[] ss = s.split(" "); //空格分隔; List ssl = new ArrayList(16); for(int i=0; i if (ss[i]==null) continue; ss[i] = ss[i].trim(); if (ss[i].length()==0) continue; ssl.add(ss[i]); // _log.debug("os_split() "+ss[i]); } String[] ss2 = new String[ssl.size()]; ssl.toArray(ss2); return ss2; } private static long os_freesize_unix(String s) { String lastLine = os_lastline(s); //获取最后一航; if (lastLine == null) { _log.warn("(lastLine == null)"); return -1; }else lastLine = lastLine.trim(); //格式:/dev/sda1 101086 12485 83382 14% /boot //lastLine = lastLine.replace('\t', ' '); String[] items = os_split(lastLine); _log.debug("os_freesize_unix() 目录:\t"+items[0]); _log.debug("os_freesize_unix() 总共:\t"+items[1]); _log.debug("os_freesize_unix() 已用:\t"+items[2]); _log.debug("os_freesize_unix() 可用:\t"+items[3]); _log.debug("os_freesize_unix() 可用%:\t"+items[4]); _log.debug("os_freesize_unix() 挂接:\t"+items[5]); if(items[3]==null) { _log.warn("(ss[3]==null)"); return -1; } return Long.parseLong(items[3])*1024; //按字节算 } private static long os_freesize_win(String s) { String lastLine = os_lastline(s); //获取最后一航; if (lastLine == null) { _log.warn("(lastLine == null)"); return -1; }else lastLine = lastLine.trim().replaceAll(",", ""); //分析 String items[] = os_split(lastLine); //15 个目录 1,649,696,768 可用字节 if (items.length<4) { _log.warn("DIR result error: "+lastLine); return -1;} if (items[2]==null) { _log.warn("DIR result error: "+lastLine); return -1;} long bytes = Long.parseLong(items[2]); //1,649,696,768 return bytes; } protected static String os_lastline(String s) { //获取多行输出的最后一行; BufferedReader br = new BufferedReader(new StringReader(s)); String line = null, lastLine=null; try { while((line=br.readLine())!=null) lastLine = line; }catch(Exception e) { _log.warn("parseFreeSpace4Win() "+e); } //_log.debug("os_lastline() = "+lastLine); return lastLine; } // private static String os_exec_df_mock() { //模拟df返回数据 // StringBuffer sb = new StringBuffer(); // sb.append("Filesystem 1K-块 已用 可用 已用% 挂载点"); // sb.append(CRLF); // sb.append("/dev/sda1 101086 12485 83382 14% /boot"); // sb.append(CRLF); // return sb.toString(); // } public static long getFreeDiskSpace(String dirName) { //return os_freesize_unix(os_exec_df_mock()); //测试Linux return os_freesize(dirName);//自动识别操作系统,自动处理 } public static void main(String[] args) throws IOException { UtilLog.configureClassPath("resources/log4j.properties", false); args = new String[3]; int x=0; args[x++] = "C:"; args[x++] = "D:"; args[x++] = "E:"; if (args.length == 0){ for (char c = 'A'; c <= 'Z'; c++) { String dirName = c + ":\\"; //C:\ C: _log.info(dirName + " " + getFreeDiskSpace(dirName)); } }else{ for (int i = 0; i < args.length; i++) { _log.info(args[i] + " 剩余空间(B):" + getFreeDiskSpace(args[i])); } } } }
评论
9 楼
yinger_fei
2010-10-15
想问一下,这个查看linux磁盘空间大小的方法可以用么?
8 楼
zeroliu
2008-09-10
完整的import如下:
本文主要演示了一种通用方式,区分win和linux等操作系统,调用外部进程来获得结果。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringReader; import java.util.ArrayList; import java.util.List; import java.util.Locale; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.bs2.core.UtilLog;//只是为了在main中指定log4j配置,可不用。
本文主要演示了一种通用方式,区分win和linux等操作系统,调用外部进程来获得结果。
7 楼
siriuscor
2008-08-02
apache标准库中有一个函数
org.apache.commons.io.FileSystemUtils.freeSpaceKb("C:\\");
导入commons-io包就可以
org.apache.commons.io.FileSystemUtils.freeSpaceKb("C:\\");
导入commons-io包就可以
6 楼
zeroliu
2006-10-23
引用
可是LogFactory没定义,这是apache中的一个类,怎么引用到其中呢?
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
这些import内容在Eclipse中是可以自动导入的,一般源代码为了精简,都不需要含这些内容。
5 楼
zqyxq007
2006-10-23
可是LogFactory没定义,这是apache中的一个类,怎么引用到其中呢?
4 楼
zeroliu
2006-10-23
引用
你好,看到这段代码非常高兴,但有些地方不明白,能否提供完整的源代码,谢谢!邮箱:zqyxq007@163.com
这已经是完整的代码,main()中就是测试用例;至于UtilLog仅仅是配置log4j日志而已,可以不用,把log4j.properites直接放在运行路径就可,或者用System.out.println替代。
3 楼
zqyxq007
2006-10-23
你好,看到这段代码非常高兴,但有些地方不明白,能否提供完整的源代码,谢谢!邮箱:zqyxq007@163.com
2 楼
zeroliu
2006-10-09
引用
老虎头像好可爱
保持和BlogDriver的一致
1 楼
ouspec
2006-10-09
老虎头像好可爱
发表评论
-
反编译android应用,降低权限反吸费和隐藏广告,重新打包和签名【原创】
2011-07-27 13:20 8721功能:反编译apk降低权限及重新签名 场景:很多软件,申请了一 ... -
修复mina2客户端IoSession.close()在jdk1.5下关闭不彻底问题
2009-11-23 15:51 6120原帖:http://hi.baidu.com/zeorliu/ ... -
日志API改进:用commons-log还是slf4j?这是一个问题!
2009-02-11 10:23 3678用commons-log还是slf4j?这是一个问题! 看jd ... -
在Web中动态生成验证码:Servlet和Rest模式
2008-09-24 10:23 3573【虎.无名】登录处理常用到一个生成随机校验码图片的处理。下面是 ... -
【虎.无名】自定义Java的REST行为分发器
2008-09-10 09:10 3019【虎.无名】在Restlet和Rails中,资源所支持的Act ... -
算法分析:货郎担问题求解分析
2008-07-22 10:28 4621【虎.无名】看到一个帖子 【迷题:走遍全国各省会的最短路线问题 ... -
答复: 谁能告诉我,什么是企业“级”应用?
2008-04-24 16:16 2239http://www.iteye.com/topic/1078 ... -
答greatolee:OMADRM的agent并不能获取明文内容
2008-04-23 17:00 1994greatolee,您好! OMADRM有2个版本,你说的是O ... -
答g_ktcy短信格式:文本,超长文本,WapPush、OMA-DRM权限、Wap书签、GPRS配置
2008-04-17 15:57 3161g_ktcy,您好! 短信有很多种类:文本,超长文本,WapP ... -
Linux下通过ftp命令实现断点续传(reget)
2008-02-19 14:43 13671同事在Linux通过FTP获取一个1.3G的大文件,传了一个上 ... -
学习笔记:Java串口编程(短信Modem).
2007-08-03 12:04 18870最终目标:在Linux下提供一个稳定可靠的Java短信发送服务 ... -
Symbian OS C++学习笔记2异常退出
2007-03-21 09:40 3224Ch2. 异常退出(Leave) -------------- ... -
OMADRM2学习笔记:DCF-v2结构解析
2007-03-21 09:39 2836【虎.无名】由于需要支持流媒体格式,因而OMA-DRM-DCF ... -
Symbian OS C++学习笔记1命名约定
2007-03-09 15:52 2360http://zeroliu.blogdriver.com/z ... -
OMADRM2学习笔记DCF-v2规范定义
2007-03-09 15:51 3646http://zeroliu.blogdriver.com/z ... -
用Java动态代理实现委托模式
2006-10-23 17:35 5402委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对 ... -
Java开发八荣八耻 zt
2006-10-20 09:54 1700以动手实践为荣,以只看不练为耻。 以打印日志为荣,以出错不报为 ...
相关推荐
在使用Qt进行软件开发时,有时我们需要获取计算机的磁盘信息,例如磁盘的总空间、已使用空间以及剩余空间。这个任务可以通过调用Qt自身的类库或集成其他平台的API来实现。在这个项目中,"qt 计算磁盘剩余空间,包括...
磁盘剩余空间查看工具是计算机用户日常操作中不可或缺的一部分,尤其在处理大量数据或安装大型软件时,确保硬盘有足够的存储空间至关重要。这类工具通常能够快速、直观地显示各个磁盘分区的可用空间,帮助用户及时...
java获取磁盘名称、磁盘大小、磁盘剩余空间
获取FAT32格式的磁盘剩余空间函数[获取FAT32格式的磁盘剩余空间函]-精品源代码
5. `DiskFreeSpace.exe`是编译后的可执行程序,用户可以直接运行查看磁盘剩余空间。 6. 使用`MSSCCPRJ.SCC`和`DiskFreeSpace.vbp`,开发者可以进行版本控制和项目管理。 这个程序对于初级程序员来说是一个很好的...
Java获取磁盘空间的两种代码示例 Java获取磁盘空间的两种代码示例
在本文中,我们将深入探讨如何使用Winform来实现磁盘剩余空间的监控功能,并通过提供的源码进行理解和学习。Winform是.NET Framework中的一个组件,它允许开发人员创建丰富的桌面应用程序,而磁盘监控则是此类应用...
### 如何得到磁盘上剩余空间的值? 在计算机编程领域中,获取磁盘剩余空间是一项常见的需求。本文将深入探讨如何通过编程手段获取磁盘上的剩余空间,并以Windows平台为例,详细介绍使用`GetDiskFreeSpace` API函数...
标题中的“vb6获取磁盘剩余容量可用空间[完美代码]硬盘容量C盘大小,支持2GB以上容量”指的是使用VB6(Visual Basic 6)编程语言来编写一段代码,目的是查询并显示计算机C盘(或其他指定驱动器)的剩余存储空间。...
要查看所有磁盘的剩余空间,可以运行`diskutil list`,或者使用`diskutil info /dev/disk0s2`来获取指定卷(如/dev/disk0s2)的详细信息。如果想以更友好的用户界面查看,可以打开“关于此Mac” -> “存储”来查看。...
"易语言取磁盘剩余空间"是一个关于获取计算机硬盘剩余存储空间的程序代码。在编程中,了解如何获取磁盘信息是非常基础且重要的技能,尤其是在进行文件操作、系统管理或者资源监控等应用场景时。 首先,我们要理解...
本程序用于检查windows服务器磁盘的剩余空间。如果磁盘的剩余空间小于您在config.xml的设置,则自动给您发一份警告...这样您就不需要天天登录服务器查看空间是不是快满了。 使用前需要先按照说明文档配置config.xml。
"易语言源码易语言取磁盘剩余空间.rar" 是一个包含易语言源代码的压缩包,专注于实现获取计算机磁盘剩余空间的功能。通过分析这个源码,我们可以深入理解易语言在处理系统级信息,如磁盘状态方面的应用。 首先,...
在Windows操作系统中,获取磁盘已用空间、剩余空间以及总空间是常见的系统管理任务,这对于监控系统资源、优化磁盘使用或者进行程序设计时的文件管理都非常重要。本篇文章将详细讲解如何利用Windows API函数`...
标题提到的“易语言取磁盘剩余空间源码”是一个关于如何使用易语言获取计算机磁盘剩余存储空间的编程示例。在本文中,我们将深入探讨这个主题,并通过相关知识点的讲解,帮助你理解和实现这一功能。 首先,我们需要...
在实际编程中,我们可能需要根据不同的需求对代码进行调整,比如循环遍历所有磁盘来获取每个磁盘的剩余空间,或者将结果以更人性化的形式(如MB、GB)展示给用户。此外,处理异常情况也是必不可少的,例如磁盘不存在...
在Windows环境下,使用C++来检测磁盘的可用空间、空闲空间、总空间以及剩余空间,是一项常见的系统信息获取任务。Visual Studio 2017(VS2017)提供了一个强大的开发环境,支持C++编程语言,并且可以方便地调用...