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等需要第三方包的支持,大家可以到我的资源库中进行免费下载: