java获得U盘根目录、读取图片视频头文件信息、获取视频时长

1、获得U盘根目录,例如我们取名U盘名称为"测试U盘",一般插入U盘后,在系统的H盘

	/**
	 * 得到系统U盘根目录
	 */
	public String findURootPath(){
		FileSystemView sys = FileSystemView.getFileSystemView();
		//循环盘符
		File[] files = File.listRoots(); 
		for(File file:files){
			//得到系统中存在的C:\,D:\,E:\,F:\,H:\
			System.out.println("系统中存在的"+file.getPath());
		}
		File file = null;
		String path = null;
        for(int i = 0; i < files.length; i++) { 
        	//得到文字命名形式的盘符系统 (C:)、软件 (D:)、公司文档 (E:)、测试U盘 (H:)
        	System.out.println("得到文字命名形式的盘符"+sys.getSystemDisplayName(files[i]));
            if(sys.getSystemDisplayName(files[i]).contains("测试U盘")){
            	file = files[i];
            	break;
            }
        }
        if(file!=null){
        	path = file.getPath();
        }
        return path;
	}


测试后获得的U盘路径为:H:\

2、获得图片头文件信息和拍照时间

	/**
	 * 获取图片头文件信息,封装为一个Map数据保存
	 */
	public static Map<String,String> getImageInfo(File file){
		Map<String,String> map = new HashMap<String, String>();
		if(file!=null){
			try{
				Metadata metadata = JpegMetadataReader.readMetadata(file);
				ExifIFD0Directory exifIFD0Directory = metadata.getDirectory(ExifIFD0Directory.class);
				//获得图片头文件信息
				map.put("software", exifIFD0Directory.getDescription(ExifIFD0Directory.TAG_SOFTWARE));
				ExifSubIFDDirectory subIFDDirectory = metadata.getDirectory(ExifSubIFDDirectory.class);
				//获得图片系统拍照时间
				map.put("time", subIFDDirectory.getDescription(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL));
			}catch (Exception e) {
				e.printStackTrace();
			}
		}
		return map;
	}

测试代码:

Map<String,String> map = getImageInfo(new File("F:\\test\\111.JPG"));
System.out.println(map.get("software")+"--"+map.get("time"));

得到信息:2.3.6--2014:02:09 10:16:09,我们有些硬件拍照,有时候要与软件相结合,这个时候,我们可以把信息放在图片的头文件信息中,方便我们软件进行处理!

3、获取视频头文件信息,是将其转为文件流的形式进行读取

	/**
	 * 获取头文件信息--以文件流的形式读取视频文件,Byte数组获取头文件
	 *   循环数组,转换为char类型,解析得到头文件 
	 * @param filepath
	 * @throws IOException
	 */
	public static String getFileHeadInfo(File file){
		try{
		  FileInputStream fis =  new FileInputStream(file);
		  byte[] b = new byte[300];
		  StringBuilder sb = new StringBuilder();
		  fis.read(b,0,300);  
		  for (int i = 0; i < b.length; i++) {
			  sb.append((char)(Integer.parseInt(b[i]+"")));
		  }
		  fis.close();
		  
		  String temp = sb.toString().toUpperCase();
		  int offset = sb.indexOf("SQ");
		  return temp.substring(offset, offset+50).trim();
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}


测试代码:

			String result = getFileHeadInfo(new File("F:\\test\\151751.AVI"));
			System.out.println(result);

得到信息:
SQ909_5530900991_100000111220003,同理,当我们视频中有信息需要给我们软件使用的时候,可以把信息放到视频的头文件信息中

3、获取视频时长

	/**
	 * 获取视频时长
	 */
	public static double getVideoTime(File file){
		double time = 0.0;
		Encoder encoder = new Encoder();
        try {
             MultimediaInfo m = encoder.getInfo(file);
             long ls = m.getDuration();
             time = Double.parseDouble(new DecimalFormat("#.00").format(ls/(1000*60.0)));
             return time;
        } catch (Exception e) {
            e.printStackTrace();
            return 0.0;
        }
	}

测试代码:

double d=getVideoTime(new File("F:\\test\\151751.AVI"));
System.out.println("视频时长---"+d);

得到相应的视频时长信息:视频时长---0.51
4、获取文件在电脑盘符上的创建时间

	/**
	 * 获取文件在盘符中创建时间,指的是文件被移动到指定文件下的时间
	 * 例如一张图片,我的拍摄时间为:2014-02-13 09:23:21
	 * 当我将其移动到电脑上F:\\test盘符下的时间为:2014-03-20 19:35:28
	 * 此方法返回的时间为:2014-03-20 19:35:28
	 * @param file
	 * @return
	 */
    public static String getFileCreateDate(File file) {
		try {
			String filePath = file.getAbsolutePath();
			Process ls_proc = Runtime.getRuntime().exec("cmd.exe /c dir " + filePath + " /tc");
			BufferedReader br = new BufferedReader(new InputStreamReader(ls_proc.getInputStream()));
			for (int i = 0; i < 5; i++) {
				br.readLine();
			}
			String result = br.readLine();
			br.close();
			String[] array = result.split("\\s+");
			String date = array[0].replaceAll("/", "-");
			String time = array[1];
			return date.concat(" ").concat(time);
		} catch (Exception e) {
			return null;
		}
	}

测试相应的文件,都可以得到相应的时间:

			result = getFileCreateDate(new File("F:\\test\\book.txt"));
			result = getFileCreateDate(new File("F:\\test\\111.JPG"));
			System.out.println("文件创建时间为"+result);

得到信息:返回时间字符串:文件创建时间为2014-03-13 11:58
大家可以根据自己的业务需求,进行相应的功能操作!上面方法中有些类比如说:Encoder、MultimediaInfo、JpegMetadataReader、ExifIFD0Directory等需要第三方包的支持,大家可以到我的资源库中进行免费下载:

http://download.csdn.net/detail/harderxin/7033579

125分50秒---162.81M---LabView01---第10章数据的显示.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView01-第10章数据的显示.wmv 92分2秒---143.46M---LabView02---第11章文件的IO及保存.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView02-第11章文件的IO及保存.wmv 37分22秒---58.09M---LabView03---第12章LabVIEW的通信.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView03-第12章LabVIEW的通信.wmv 9分58秒---21.2M---LabView04---第13章LabVIEW与其它软件的连接.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView04-第13章LabVIEW与其它软件的连接.wmv 4分45秒---9.99M---LabView05---第14章LabVIEW中子VI的设置及调用.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView05-第14章LabVIEW中子VI的设置及调用.wmv 34分30秒---61.03M---LabView06---第15章其它高级技巧.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView06-第15章其它高级技巧.wmv 9分41秒---11.37M---LabView07---第2章第一个LabVIEW例子.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView07-第2章第一个LabVIEW例子.wmv 86分58秒---140.25M---LabView08---第3章基本元素.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView08-第3章基本元素.wmv 76分48秒---143.72M---LabView09---第4章程序结构.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView09-第4章程序结构.wmv 5分46秒---14.67M---LabView10---第5章数据采集.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView10-第5章数据采集.wmv 12分50秒---18.35M---LabView11---第6章数据传输及电脑接口.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView11-第6章数据传输及电脑接口.wmv 59分57秒---87.83M---LabView12---第7章数据的分析及处理.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView12-第7章数据的分析及处理.wmv 42分4秒---61.02M---LabView13---第8章LabVIEW的信号调理.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView13-第8章LabVIEW的信号调理.wmv 132分19秒---178.86M---LabView14---第9章分析处理中数学计算.wmv---F:/Resource/video/硬件/AltiumDesigner/LabView14-第9章分析处理中数学计算.wmv
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值