62,616
社区成员
发帖
与我相关
我的任务
分享
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
/**
*
* @author 跆拳の尐輝龍
* 程序功能:取得所有磁盘中的可写磁盘的文件和目录个数,
* 并将所有的文件按照扩展名进行分组排序,每个
* 分组的文件依次按照文件大小、最后被修改的时间和文件名排序
*
*/
public class MyFileProject {
public static long docNum = 0;//统计文件的个数
public static long dirNum = 0;//统计目录的个数
public static List<List<File>> list = new ArrayList<List<File>>();//存放分组后的文件
public static List<File> result = new ArrayList<File>();//存放文件
public static void main(String[] args) throws IOException {
File file = new File("D:\\跆拳道"); //指定搜索的文件名
fileStatistics(file); //统计文件、目录个数,并储存到result数列中
listSort(result); //对result数列中的文件按文件扩展名进行排序
fileGroup(result);//对result数列中的文件按扩展名进行分组,分别存储到list中
fileSort(list);//对list中的文件进行排序
filePrint(list);//将 指定 搜索的文件名写入到指定的文件中
System.out.println(list.size());
}
/**
* 统计文件及目录个数,并将文件存放入result中
* @param file 文件对象
*/
private static void fileStatistics(File file) {
if(file.isDirectory()) {
dirNum++;
File[] files = file.listFiles();
for(int i = 0;i < files.length;i++) {
fileStatistics(files[i]);
}
} else {
docNum++;
result.add(file);
}
}
/**
* 对result里面的文件按文件扩展名进行排序
* @param result 数列对象
*/
private static void listSort(List<File> result) {
Collections.sort(result,new Comparator<File>() {
public int compare(File f1,File f2) {
String str1 = f1.getName();
String str2 = f2.getName();
str1 = str1.substring(str1.lastIndexOf(".")+1, str1.length());
str2 = str2.substring(str2.lastIndexOf(".")+1,str2.length());
if(str1.compareToIgnoreCase(str2) > 1) return 1;
else if(str1.compareToIgnoreCase(str2) == 0) return 0;
else return -1;
}
});
}
/**
* 对result中的文件进行按文件扩展名分组
* @param result数列对象
*/
private static void fileGroup(List<File> result) {
for(int i = 0;i < result.size();i++) {
for(int j = i+1;j<result.size();j++) {
String str1 = result.get(i).getName();
String str2 = result.get(j).getName();
str1 = str1.substring(str1.lastIndexOf(".")+1,str1.length());
str2 = str2.substring(str2.lastIndexOf(".")+1,str2.length());
List<File> list1 = new ArrayList<File>();
list.add(list1);
list1.add(result.get(i));
if(str1.equals(str2)) list1.add(result.get(j));
else {
List<File> list2 = new ArrayList<File>();
list2.add(result.get(j));
list.add(list2);
}
}
}
}
/**
* 对每个分组的文件依次按照文件大小、最后被修改的时间和文件名排序
* @param list2 数列对象
*/
private static void fileSort(List<List<File>> list) {
Iterator<List<File>> i = list.iterator();
while(i.hasNext()) {
Collections.sort(i.next(),new Comparator<File>() {
public int compare(File f1,File f2) {
long fileLength1 = f1.length();
long fileLength2 = f2.length();
long lastTime1 = f1.lastModified();
long lastTime2 = f2.lastModified();
String str1 = f1.getName();
String str2 = f2.getName();
if(fileLength1 > fileLength2) {
return 1;
}else if(fileLength1 == fileLength2) {
if(lastTime1 > lastTime2) {
return 1;
}else if(lastTime1 == lastTime2) {
if(str1.compareToIgnoreCase(str2) > 1) {
return 1;
}else if(str1.compareToIgnoreCase(str2) == 0) {
return 0;
}else return -1;
}else return -1;
}else return -1;
}
});
}
}
/**
* 将数列里的文件写入到新建的文件里
* @param list 数列对象
* @throws IOException
*/
private static void filePrint(List<List<File>> list) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\MyFileProject.txt"));
bw.write("文件开始");
bw.newLine();
bw.write("%%%%%%");
bw.newLine();
String str;
for(int i = 0;i<list.size();i++) {
for(int j = 0;j<list.get(i).size();j++) {
str ="File name :"+list.get(i).get(j).getName()+
", last modified time is :"+list.get(i).get(j).lastModified()+
",File length :"+list.get(i).get(j).length();
bw.write(str);
bw.newLine();
}
}
bw.write("%%%%%%");
bw.newLine();
bw.write("文件的个数:"+docNum);
bw.newLine();
bw.write("目录的个数:"+dirNum);
bw.flush();
bw.close();
}
}
for(int i = 0;i < result.size();i++) {
for(int j = i+1;j<result.size();j++) {
list.add(list1);
list1.add(result.get(i));
if(str1.equals(str2)) list1.add(result.get(j));
else {
list.add(list2);
}
}
}
private static void fileGroup(List<File> result) {
int listnum=1;int i,j=0,MAX=9999999;
ArrayList [] sublist= new ArrayList[MAX];
for(i=1;i <= result.size();i++)sublist[i]= new ArrayList();
for(i = 0;i < result.size();) {
if(j==result.size())break;
else{
list.add(sublist[listnum]);
sublist[listnum].add(result.get(i));
for(j = i+1;j<result.size();) {
String str1 = result.get(i).getName();
String str2 = result.get(j).getName();
str1 = str1.substring(str1.lastIndexOf(".")+1,str1.length());
str2 = str2.substring(str2.lastIndexOf(".")+1,str2.length());
if(str1.equals(str2)) {
sublist[listnum].add(result.get(j));
j++;
}
else {
listnum++;
i=j;
break;
}
}
}
}
}