Java读取U盘的PID、VID、SN

Java是不能像C、C++那样直接读取U盘的PID、VID、SN信息的,但是我们可以换一个思路,让Java从注册表中读取信息。

这是U盘信息在注册表中的位置:HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\USBSTOR\\Enum

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;


public class Interface extends JFrame{
	private JPanel jp;		//界面容器
	private JScrollPane jsp;	//包裹JTable的滚动面板
	private JTable jt;		//使用JTable显示信息
	
	public JTable getJt(){
		return jt;
	}
	
	public Interface(){
		jp = new JPanel();
		jp.setBounds(0, 0, 600, 400);
		Vector<Vector<Object>> rowData = this.getRowData();
		Vector<String> columnNames = this.getColumnNames();
		DefaultTableModel dtm = getModel(rowData, columnNames);
		jt = new JTable(dtm) {
			public boolean isCellEditable(int row, int column) {
				return false;
			}
		};
		this.add(jp);
		jsp = new JScrollPane(jt);
		jsp.setBounds(0, 0, 600, 400);
		jp.add(jsp);
		this.setLayout(null);
		this.setTitle("USB");
		// 设置窗体关闭时即退出程序
		JFrame.setDefaultLookAndFeelDecorated(true);
		this.setSize(600, 400);
		// 设置窗体不能拉伸
		this.setResizable(false);
		// 设置关闭窗体时退出程序
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 设置窗体打开时在中间位置
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	}
	
	public Vector<Vector<Object>> getRowData(){
		String commond = "reg query HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\USBSTOR\\Enum";
        Vector<Vector<Object>> data = null;
        try {
        	//获取注册表信息
            Process ps = null;
            ps = Runtime.getRuntime().exec(commond);
            ps.getOutputStream().close();
            InputStreamReader i = new InputStreamReader(ps.getInputStream());
            String line;
            BufferedReader ir = new BufferedReader(i);
            int count = 0;
            data = new Vector<Vector<Object>>();
            //将信息分离出来
            while ((line = ir.readLine()) != null) {
                if(line.contains("USB\\VID")){
                	count ++;
                	for(String s : line.split("    ")){
                		if(s.contains("USB\\VID")){
                			Vector<Object> v = new Vector<Object>();
                			for(String ss : s.split("\\\\")){
                				if(ss.contains("VID")){
                					for(String sss : ss.split("&")){
                						v.add(sss);
                					}
                				}else if(ss.contains("USB")){
                					v.add(ss+count);
                				}else{
                					v.add(ss);
                				}
                			}
                			data.add(v);
                		}
                	}
                }
            }
        } catch (IOException e) {
            e.printStackTrace(); 
        }
        return data;
	}
	
	//设置默认的数据模型
	public DefaultTableModel getModel(Vector<Vector<Object>> data, Vector<String> columnNames) {
		DefaultTableModel dtm = new DefaultTableModel(data, columnNames);
		return dtm;
	}

	//设置表头信息
	public Vector<String> getColumnNames() {
		Vector<String> columnNames = new Vector<String>();
		columnNames.add("USB");
		columnNames.add("VID");
		columnNames.add("PID");
		columnNames.add("SN");
		return columnNames;
	}
	
	public static void main(String[] args) {
		Interface in = new Interface();
	}
}

运行的结果:


  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值