获取文件的基本属性
用来获取文件夹或文件的属性:大小,文件夹中包含文件的个数,文件的创建时间(难点);能简单达到 : 你通过鼠标右键得到文件的属性
重点:获取文件的创建时间
package com.hikvision;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
/**
* <p>
* 用来获取文件夹或文件的属性:大小,文件夹中包含文件的个数,文件的创建时间(难点);能简单达到 : 你通过鼠标右键得到文件的属性
* </p>
* @author YangGuanLin 2011-6-7 下午01:20:59
* @version V1.0
* @modificationHistory=========================逻辑或功能性重大变更记录
* @modify by user: {修改人} 2011-6-7
* @modify by reason:{方法名}:{原因}
*/
public class Files {
/**
* 获取文件的大小
* @author YangGuanLin 2011-6-7 下午01:23:08
* @param f
* @return
* @throws Exception
*/
public long getFileSize(File f) {
FileInputStream fis = null;
long size = 0;
try {
fis = new FileInputStream(f);
size = fis.available();
} catch (Exception e) {
e.printStackTrace();
if (fis != null) {
try {
fis.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return size;
}
/**
* 递归获取文件夹的大小
* @author YangGuanLin 2011-6-7 下午01:22:38
* @param f
* @return
* @throws Exception
*/
public long getFolderSize(File f) {
long size = 0;
File flist[] = f.listFiles();
for (int i = 0; i < flist.length; i++) {
if (flist[i].isDirectory()) {
size = size + getFolderSize(flist[i]);
} else {
size = size + flist[i].length();
}
}
return size;
}
/**
* 转换文件大小的格式
* @author YangGuanLin 2011-6-7 下午02:46:15
* @param fileS
* @return
*/
public String FormetFileSize(long fileS) {
DecimalFormat df = new DecimalFormat("#.00");
String fileSizeString = "";
if (fileS < 1024) {
fileSizeString = fileS==0?"0 B":df.format((double)fileS)+" B";
} else
if (fileS < 1048576) {
fileSizeString = df.format((double)fileS / 1024) + "K";
} else
if (fileS < 1073741824) {
fileSizeString = df.format((double)fileS / (1024 * 1024)) + "M";
} else {
fileSizeString = df.format((double)fileS / (1024 * 1024 * 1024)) + "G";
}
return fileSizeString;
}
/**
* 递归求取文件夹中 文件和文件夹的个数
* @author YangGuanLin 2011-6-7 下午01:11:18
* @param f
* @return
*/
public long[] getFiles(File f) {
long fileSize = 0;
long folderSize = 0;
File[] flist = f.listFiles();
fileSize = flist.length;
for (int i = 0; i < flist.length; i++) {
if (flist[i].isDirectory()) {
fileSize = fileSize + getFiles(flist[i])[0];
fileSize--;
folderSize++;
folderSize = folderSize + getFiles(flist[i])[1];
}
}
long[] fs = {fileSize, folderSize};
return fs;
}
/**
* 得到文件或文件夹的创建时间
* @author YangGuanLin 2011-6-7 下午01:54:51
*/
public String getFileCreateTime(String path) {
try {
// 只需要修改"D:\\IBM" 如:F:\\a.txt 还不区分大小写
Process p = Runtime.getRuntime().exec("cmd /C dir " + path + " /tc ");
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str;
int i = 0;
while ((str = br.readLine()) != null) {
i++;
if (i == 6) {
return str.substring(0, 17);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return "获取文件创建时间出错";
}
/**
* 打印文件的各个属性
* @author YangGuanLin 2011-6-7 下午02:46:55
* @param path
*/
public void getFileProperties(String path) {
File f = new File(path);
if (f.exists()) {
if (f.isDirectory()) {
System.out.println("类 型: 文件夹\n包 含: " + getFiles(f)[0] + "个文件," + getFiles(f)[1]
+ "个文件夹\n大 小: " + FormetFileSize(getFolderSize(f)));
} else {
System.out.println("类 型: 文件\n大 小: " + FormetFileSize(getFileSize(f)));
}
String str=f.getAbsolutePath();
System.out.println("位 置: " + (str).substring(0,str.lastIndexOf("\")));
System.out.println("创建时间 : " + getFileCreateTime(path));
if (f.isHidden()) {
System.out.println("属 性:隐藏");
} else {
System.out.println("属 性:只读");
}
} else {
System.out.println("文件或文件夹不存在");
}
}
public static void main(String args[]) {
long startTime = System.currentTimeMillis();
String path = "D:\\FileManager";
new Files().getFileProperties(path);
long endTime = System.currentTimeMillis();
System.out.println("总共花费时间为:" + (endTime - startTime) + "毫秒…");
}
}