`

获取磁盘信息并扫描是否连接移动磁盘之Java版

    博客分类:
  • Java
阅读更多

前面写了个JS版,这里记录个java版本的,思路跟先前那个差不多,这里就不多说了。所不同的是:那个是客户端的,这里是在服务器端,而且了除了用ajax循环扫描之后,还添加了java中的循环扫描。

 

1、前台展示

<body>
   <table width="100%" border="0" cellspacing="0" cellpadding="0" class="ztb_l" id="upanTable">
	<tr>
		<td>盘符路径(Path)</td>
		<td>驱动器类型(DriveType)</td>
		<td>卷标名(VolumeName)</td>
		<td>可用容量大小(AvailableSpace)</td>
		<td>总空间容量大小(TotalSize)</td>
	</tr>
</table>
</body>

 2、工具类

a、USB实体类:

public class Usb implements Serializable {
	private static final long serialVersionUID = -3413919743044797833L;
	private String pathName;//路径名称,如D:\
	private String diskName;//盘符名称,如软件 (D:)
	private String diskType;//盘符类型,如本地磁盘
	private int flag;//标识 0-本地磁盘 1-可移动磁盘
	private double usableSize;//可用空间
	private double totalSize;//总空间
	//get/set方法
}

b、获取磁盘信息工具类:

public class DiskUtil {
	private final static String localDiskName = "本地磁盘";
	private final static String removableDiskName = "可移动磁盘";
	private final static String enLocalDiskName = "Local Disk";
	private final static String enRemovableDiskName = "Removable Disk";
	
	/**
	 * 该方法用来获取磁盘信息
	 * @param flag:获取的磁盘类型信息:1-获取所有磁盘信息及数量 2-获取本地磁盘信息和数量 3-获取可移动磁盘信息和数量
	 * @param flag2:磁盘容量显示方式:1-GB 2-MB 3-KB 4-B 默认为GB
	 * @return list<Usb>:返回磁盘基本信息集合
	 * */
	public List<Usb> getUdiskInfo(int flag,int flag2) {
		List<Usb> diskList = new ArrayList<Usb>();
		FileSystemView fileSystemView = FileSystemView.getFileSystemView();// 获取FileSystemView对象
		double unit = getDiskUnit(flag2);//将磁盘格式化为GB
		Usb usb = null;
		File[] roots = File.listRoots();
		String diskType="";
		long usableSpace=0;
		long totalSpace=0;
		try{
			for (File file : roots) {
				diskType="";
				usableSpace=0;
				totalSpace=0;
				diskType= fileSystemView.getSystemTypeDescription(file);// 获取磁盘的类型描述信息
				//System.out.println("磁盘类型:"+diskType);
				// 当磁盘为本地磁盘时
				if(diskType.startsWith(localDiskName)|| diskType.startsWith(enLocalDiskName)){
					if(flag==3){//说明是要获取移动磁盘信息,而当前是本地磁盘信息,因此直接退出当前循环
						continue;
					}else{//获取全部或本地磁盘,直接创建对象并设置值
						usb = new Usb();//实例化对象
						usb.setFlag(0);//标记为本地磁盘
					}
				}
				// 当磁盘为可移动磁盘时
				else if(diskType.startsWith(removableDiskName)|| diskType.startsWith(enRemovableDiskName)){
					if(flag==2){//说明是要获取本地磁盘信息,而当前不是本地磁盘信息,因此直接退出当前循环
						continue;
					}else{//获取全部或可移动磁盘,直接创建对象并设置值
						usb = new Usb();//实例化对象
						usb.setFlag(1);//标记为可移动磁盘
					}
				}else{//未知的磁盘类型,直接退出当前循环
					continue;
				}
				
				usb.setDiskType(diskType);//磁盘类型
				usb.setPathName(file.getCanonicalPath());//获取规范路径名称,如C:\
				usb.setDiskName(fileSystemView.getSystemDisplayName(file));//获取磁盘名称,如:软件 (D:)
				
				usableSpace = file.getUsableSpace();// 获取磁盘的可用空间
				usb.setUsableSize(usableSpace/unit);
	
				totalSpace = file.getTotalSpace();// 获取磁盘的总空间
				usb.setTotalSize(totalSpace/unit);
				
				diskList.add(usb);
			}
		}catch(Exception e){
			e.printStackTrace();
			diskList=null;
		}
		return diskList;
	}
	
	/**
	 * 该方法用来获取磁盘容量显示方式:1-GB 2-MB 3-KB 4-B 默认为GB
	 * @return double:磁盘单位,如GB:1024*1024*1024 MB:1024*1024 KB为:1024 B为:1
	 * **/
	private double getDiskUnit(int flag){
		double unit = 1024 * 1024 * 1024;//将磁盘格式化为GB,默认值
		switch(flag){
		case 2:{
			unit = 1024 * 1024;//MB
			break;
		}
		case 3:{
			unit = 1024;//KB
			break;
		}
		case 4:{
			unit = 1;//B
			break;
		}
		default:
			unit = 1024 * 1024 * 1024;//GB
			break;
		}
		return unit;
	}

	
	/**
	 * 该方法用来读取指定目录下的所有文件
	 * @param File:文件对象
	 * **/
	private void printFileInfo(File file){
		if(file!=null){//保证指定的对象不为空
			if(file.isDirectory()){//是否目录,那么需要循环该目录下的文件夹
				File f[] = file.listFiles();//获取全部文件
				if(f!=null){
					for(int i=0;i<f.length;i++){//循环所有文件
						printFileInfo(f[i]);
					}
				}
			}else{
				System.out.println(file);
			}
		}
	}
	
	/*测试方法
	public static void main(String[] args){
		//1、获取磁盘基本信息
		List usbInfo = getUdiskInfo(3,1);//获取全部磁盘信息并且以GB形式计算空间大小
		Usb  usb = null;
		DecimalFormat df = new DecimalFormat("###0.00");
		if(usbInfo!=null && usbInfo.size()>0){//说明有数据
			for(int i=0;i<usbInfo.size();i++){//只取前usbInfo.size()个对象
				usb = (Usb)usbInfo.get(i);
				System.out.println("盘符编号:"+usb.getPathName()+"\n盘符类型:"+usb.getDiskType()+"\n盘符名称:"+usb.getDiskName()+"\n总空间大小:"+df.format(usb.getTotalSize())+"GB\n剩余空间大小:"+df.format(usb.getUsableSize())+"GB\n");
			}
		}
		//2、读取磁盘中的内容(只读取一个)
		File file = new File("G:\\");
		printFileInfo(file);
	}
	*/
}

3、获取所有磁盘的信息并显示到页面:

a、servlet:
//获取所有磁盘信息
DiskUtil diskInfo = new DiskUtil();
//获取全部磁盘信息并且以GB形式计算空间大小
List<Usb> usbList = diskInfo.getUdiskInfo(1,1);
if(usbList!=null && usbList.size()>0){
	request.setAttribute("usbList",usbList);
}
request.getRequestDispatcher("test/diskForJava.jsp").forward(request, response);

b、页面展示:

<table width="100%" border="0" cellspacing="0" cellpadding="0" class="ztb_l" id="upanTable">
	<tr>
		<td>盘符路径(Path)</td>
		<td>驱动器类型(DriveType)</td>
		<td>卷标名(VolumeName)</td>
		<td>可用容量大小(AvailableSpace)</td>
		<td>总空间容量大小(TotalSize)</td>
	</tr>
	<c:forEach items="${usbList }" var="usb">
		<tr>
			<td>${usb.pathName }</td>
			<td>${usb.diskType }</td>
			<td>${usb.diskName }</td>
			<td><fmt:formatNumber value="${usb.usableSize }" pattern="###0.##" />GB</td>
			<td><fmt:formatNumber value="${usb.totalSize }" pattern="###0.0#"/>GB</td>
		</tr>
	</c:forEach>
</table>

 c、注意:记得导入jstl包:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

4、使用AJAX获取磁盘信息并显示json格式获取多个,若没有连接磁盘则扫描磁盘)

a、ajax请求:

function getUInfo(){
	$.ajax({
		type:"post",
		async:false,
		data:{"time":new Date().getTime()},
		dataType:"json",
		url:"MainServlet",
		timeout:20000,
		error:function(XMLHttpRequest,textStatus,errorThrown){
			// alert(XMLHttpRequest.status);
			// alert(XMLHttpRequest.readyState);
			// alert(textStatus);
			// alert("加载错误,错误原因:\n"+errorThrown);
			getUInfo();//没有识别到那么继续查询
		},
		success:function(data){
	        if(data.length>0){//说明有识别到U盘
	        	var tableHtml="";
	        	for(var i=0;i<data.length;i++){
	        		tableHtml +="<tr>"
	        			   +"<td>"+data[i].pathName+"</td>"
	        			   +"<td>"+data[i].diskType+"</td>"
	        			   +"<td>"+data[i].diskName+"</td>"
	        			   +"<td>"+data[i].usableSize.toFixed(2)+"GB</td>"
	        			   +"<td>"+data[i].totalSize.toFixed(2)+"GB</td>"
	        			   +"</tr>";
	        	}
	        	$("#upanTable").append(tableHtml);
	        }else{// 没有识别到那么继续查询
	        	getUInfo();
	        }
		}
	});
}

b、servlet处理:

String retuStr = "";
DiskUtil diskInfo = new DiskUtil();
boolean notFindIt = true;//访问到有移动磁盘信息
List<Usb> usbList = null;
Usb  usb = null;
try {
	while(notFindIt){//若是没有找到一次信息则一直循环
		usbList= diskInfo.getUdiskInfo(3,1);//获取全部磁盘信息并且以GB形式计算空间大小
		if(usbList!=null && usbList.size()>0){//说明找到了
			notFindIt=false;//此时循环会自动结束
		}else{
			Thread.sleep(5*1000);//休眠5秒
		}
	}
} catch (InterruptedException e) {
	e.printStackTrace();
	usbList=null;
}
if(usbList!=null && usbList.size()>0){//说明有插入U盘
	retuStr = JSONArray.fromObject(usbList).toString();
}else{
	retuStr="";
}
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
response.getWriter().write(retuStr);

c、注意:使用json时记得导入json需要的7个jar包

 

5、使用AJAX获取磁盘信息并显示xml格式获取一个,若没有连接磁盘则扫描磁盘)

a、ajax请求:

function getUInfo2(){
	$.ajax({
		type:"post",
		async:false,
		data:{"flag":"2","time":new Date().getTime()},
		dataType:"text",
		url:"MainServlet",
		error:function(XMLHttpRequest,textStatus,errorThrown){
			// alert(XMLHttpRequest.status);
			// alert(XMLHttpRequest.readyState);
			// alert(textStatus);
			// alert("加载错误,错误原因:\n"+errorThrown);
			getUInfo2();// 加载错误,那么继续查询
		},
		success:function(data){
			data = $.parseXML(data);//先使用jQuery的parseXML方法转换成Jquery的XML对象
			var count = $(data).find("count").text();// U盘数量
	        count = parseInt(count,10);
	        if(count>0){// 说明有识别到U盘
	        	var pathName = $(data).find("pathname").text();// 路径名称,如D:\
	        	var diskType = $(data).find("disktype").text();// 磁盘类型,如本地磁盘、可移动磁盘									// (D:)
	        	var diskName = $(data).find("diskname").text();// 盘符名称,如软件
	        	var usableSize = $(data).find("usablesize").text();// 可用空间,GB显示
	        	var totalSize = $(data).find("totalsize").text();// //总空间,GB显示
	        	//alert("路径名称:"+pathName+"\n盘符名称:"+diskName+"\n总空间:"+totalSize+"GB\n可用空间:"+usableSize);
	        	var tableHtml="";
	        	tableHtml +="<tr>"
     			   +"<td>"+pathName+"</td>"
     			   +"<td>"+diskType+"</td>"
     			   +"<td>"+diskName+"</td>"
     			   +"<td>"+usableSize+"</td>"
     			   +"<td>"+totalSize+"</td>"
     			   +"</tr>";
     			$("#upanTable").append(tableHtml);
	        }else{// 没有识别到那么继续查询
	        	getUInfo2();
	        }
		}
	});
}

b、servlet处理:

StringBuffer retuStr = new StringBuffer();
DiskUtil diskInfo = new DiskUtil();
boolean notFindIt = true;//访问到有移动磁盘信息
List usbInfo = null;
Usb  usb = null;
try {
	while(notFindIt){//若是没有找到一次信息则一直循环
		usbInfo= diskInfo.getUdiskInfo(3,1);//获取全部磁盘信息并且以GB形式计算空间大小
		if(usbInfo!=null && usbInfo.size()>0){//说明找到了
			notFindIt=false;//此时循环会自动结束
		}else{
			Thread.sleep(5*1000);//休眠5秒
		}
	}
} catch (InterruptedException e) {
	e.printStackTrace();
	usbInfo=null;
}
DecimalFormat df = new DecimalFormat("###0.##");
DecimalFormat df2 = new DecimalFormat("###0.0#");
if(usbInfo!=null && usbInfo.size()>0){//说明有插入U盘
	usb = (Usb)usbInfo.get(0);//只取第一个U盘信息
	retuStr.append("<usb><count>1</count>")
		   .append("<pathname>"+usb.getPathName()+"</pathname>")
		   .append("<disktype>"+usb.getDiskType()+"</disktype>")
		   .append("<diskname>"+usb.getDiskName()+"</diskname>")
		   .append("<usablesize>"+df2.format(usb.getUsableSize())+"GB</usablesize>")
		   .append("<totalsize>"+df.format(usb.getTotalSize())+"GB</totalsize>")
		   .append("</usb>");
}else{
	retuStr.append("<usb><count>0</count></usb>");
}
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
response.getWriter().write(retuStr.toString());
分享到:
评论

相关推荐

    获取磁盘信息并扫描是否连接移动磁盘之JS版

    标题中的“获取磁盘信息并扫描是否连接移动磁盘之JS版”指的是使用JavaScript语言来获取计算机的磁盘信息,并检查是否有移动磁盘(如USB闪存驱动器)已连接到系统。在Web开发中,JavaScript通常用于客户端的交互逻辑...

    实现磁盘的整体扫描!扫描电脑本机的需要的文件格式!

    a) 获取根目录:首先,程序需要获取磁盘的根目录,例如"C:\"。 b) 遍历目录:使用文件遍历函数开始从根目录开始遍历,对每个目录项进行以下操作。 c) 检查文件类型:对于每个文件,检查其文件名,特别是其扩展名...

    本地硬盘识别成可移动磁盘的解决办法

    标题中的“本地硬盘识别成可移动磁盘的解决办法”是一...对于描述中提到的具体问题,详细步骤和解决方案通常会包含在名为“本地硬盘识别成可移动磁盘的解决办法.docx”的文档中,你可以打开该文档获取具体的操作指南。

    java磁盘调度

    Java磁盘调度是一种在计算机操作系统中管理硬盘驱动器读写操作的重要策略,目的是优化磁盘访问效率,减少磁头移动时间,从而提高系统的整体性能。本文将深入探讨三种常见的磁盘调度算法:先来先服务(FCFS)、最短寻道...

    磁盘清理工具 智能分析扫描整理磁盘

    它通过智能分析和扫描技术,能够快速定位并清理不必要的文件,从而释放硬盘空间,提高系统性能。在现代计算机使用中,随着数字内容的不断积累,磁盘空间的管理变得越来越重要。下面我们将深入探讨磁盘清理工具的功能...

    最全磁盘性能指标和健康度扫描检测工具

    通过运行这款软件,用户可以轻松获取磁盘的各项详细信息,包括上述提到的性能指标和健康状况。它可以帮助用户了解磁盘的实际工作状态,预防可能出现的问题,保障数据安全。 总的来说,磁盘性能和健康度的监测对于...

    操作系统实验磁盘调度扫描算法循环扫描算法.doc

    本实验主要探讨两种磁盘调度算法:扫描算法(SCAN)和循环扫描算法(CSCAN),这两种算法都是为了优化磁头移动,减少寻道时间。 1. 扫描算法(SCAN算法) 扫描算法模拟电梯调度的原理,磁头从磁盘的一端(如外圈)...

    java磁盘调度版本.pdf

    在Java编程语言中,这个程序实现了一个简单的磁盘调度模拟器,用于演示和比较不同的磁盘调度算法。磁盘调度是操作系统中一个重要的概念,它决定了磁头如何在磁盘表面移动以服务到来的I/O请求。以下是程序中涉及的...

    操作系统 磁盘调度算法 java版.pdf

    操作系统中的磁盘调度算法是管理磁盘读写操作的关键部分,其主要目标是优化磁头移动,以提高I/O效率。以下是对四种常见磁盘调度算法的详细解释: 1. **先来先服务(FCFS,First-Come First-Served)**: FCFS是最...

    WizTree 扫描磁盘空间占用

    WizTree的工作原理是通过直接访问NTFS文件系统的MFT(主文件表)来获取文件信息,这种方式比传统的逐个文件扫描速度更快。它以树状结构显示文件系统,最大的文件和目录会出现在顶部,便于用户优先处理。 使用...

    外接磁盘U盘识别.rar

    `Form1.cs`中可能包含了对外部磁盘的扫描和识别逻辑,可能使用了Windows API来获取磁盘信息。`判断驱动器类型.csproj`文件则定义了项目的构建规则,包括引用的库、编译选项等。当程序运行时,它会读取`app.config`中...

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目源代码

    Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java...

    java开源包4

    3、连接复用,因此在多线程获取连接时无需阻塞; 4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换...

    扫描磁盘所有文件的例子 (2KB)...

    这个"扫描磁盘所有文件的例子"展示了如何使用VB来遍历一个磁盘或目录中的所有文件,并进行相应的操作。2KB的源代码虽然小巧,但包含了核心的文件遍历逻辑。下面将详细解析这个知识点。 首先,我们需要了解VB中的...

    java源码包3

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    操作系统课程设计-磁盘调度算法设计

    在实际编程中,你可以通过读取R.txt文件获取磁盘请求序列,然后根据所选的调度算法计算出磁头的移动路径,并将结果保存到d.txt文件中。你可以利用MFC的文件操作函数,如CFile类,来处理输入输出文件。同时,你可能还...

    java源码包2

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    使用c语言写的磁盘碎片整理程序

    1. 扫描磁盘:程序首先会遍历整个磁盘,获取每个文件的位置和大小信息。 2. 分析碎片:根据扫描结果,程序分析哪些文件是碎片化的,即不连续存储的。 3. 制定整理计划:确定最优的文件移动策略,以最小化整理过程中...

Global site tag (gtag.js) - Google Analytics