较为高效的复制文件案例
public static void copy(String d1,String d2) throws IOException {
File file = new File(d1);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(d2));
byte[] bs = new byte[8*1024];
int len;
while ((len = bis.read(bs))!=-1) {
bos.write(bs);
}
bis.close();
bos.close();
}
文件复制,与上面的连用
public static void copy_2_1(String yuan,String target) throws IOException {
File yuanw = new File(yuan);
if (!yuanw.exists()) {
System.out.println("文件不存在");
}
if (yuanw.isFile()) {
copy(yuan, target);
return;
}
File[] listFiles = yuanw.listFiles();
File f2 = new File(target);
if (!f2.exists()) {
f2.mkdirs();
}
for (File file : listFiles) {
if (file.isFile()) {
copy(file.getPath(), target+"\\"+file.getName());
}else {
copy_2_1(file.getPath(), target+"\\"+file.getName());
}
}
}
计算某一路径下拥有相同后缀文件的数量
public static void houZhuiCount(String src) {
File file = new File(src);
Map<String, Integer> map = new HashMap<String, Integer>(); //重复调用下 会输出每个文件夹的文件个数
//定义到方法外可以直接获得每一次统计后累加的效果
if (!file.exists()) {
System.out.println("指定目录下没有文件");
}
if (file.isFile()) {
String s0 = file.getName().substring(file.getName().indexOf('.'));
map.put(s0, map.containsKey(s0)?map.get(s0)+1:1);
}
File[] listFiles = file.listFiles();
for (File f0 : listFiles) {
if (f0.isFile()) {
String s1 = f0.getName().substring(f0.getName().indexOf('.'));
map.put(s1, map.containsKey(s1)?map.get(s1)+1:1);
}else {
houZhuiCount(f0.getPath());
}
}
Set<String> keySet = map.keySet();
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
System.out.println(next+" have "+map.get(next));
}
}
计算某一路径下文件大小
public static void totalSize(String src) {
File file = new File(src);
long size = 0; //可将计数变量定义在方法外声明为静态,可以获得最终修改值
if (!file.exists()) {
System.out.println("指定目录下文件不存在");
}
if (file.isFile()) {
System.out.println("size : "+file.length()/1024+"KB");
}
File[] listFiles = file.listFiles();
if (null!=listFiles) { //展开后判断文件夹是否为空,不空继续遍历,否则跳过
for (File f0 : listFiles) {
if (f0.isFile()) {
size = size+f0.length();
}else {
totalSize(f0.getPath());
}
}
}
System.out.println("size : "+size/1024+"KB"); //每个文件夹下的每个文件
}
删除某一路径下所有文件
public static void deleteDir(String src) {
File file = new File(src);
if (!file.exists()) {
System.out.println("目录下没有该文件。");
}
if (file.isFile()) {
file.delete();
}
File[] listFiles = file.listFiles();
if (listFiles!=null) { //判断空文件夹
for (File f0 : listFiles) {
if (f0.isFile()) {
f0.delete();
}else {
deleteDir(f0.getPath());
}
}file.delete(); //每一次遍历删除完文件后将空文件删掉
}
}