public class Compare {
LinkedList list1 = new LinkedList();//用来存放文件夹的绝对路径
LinkedList list2 = new LinkedList();//用来存放文件的绝对路径
public void files(String filename) throws IOException
{ //定义一个files方法,这个方法用来把对应路径下的文件夹遍历
File file = new File("filename");
File[] file1 = file.listFiles();//存放的是一级目录下的文件以及文件夹
for(int i = 0;i < file1.length;i++)
{
if (file1[i].isDirectory())
list1.add(file1[i]);//如果是文件夹就加到list1中
else
list2.add(file1[i]); //如果是文件的话,就加到list2中,
}
File tmp;
while(!list1.isEmpty()){ //判断list1是否为空,如果为空的话,表示所给的文件路径下只有一个文件
tmp =(File) list1.removeFirst(); // 把存放一级目录下的第一个文件的路径给tmp
if(tmp.isDirectory()) //判断这个路径是不是一个文件
{
file1 = tmp.listFiles(); //如果是一个文件的话,把这个文件下的(第三级目录)中的文件和文件夹的路径给file1数组
if(file1 == null) //如果这个数组为空,即这个文件夹下是空的,那么结束本次循环,然后继续找到链表的第二个(现为第一个)
continue;
for(int i = 0;i < file1.length;i++)
{
if(file1[i].isDirectory()) //遍历现在的file数组,此时存放的是原来链表第一个元素路径名下的所有文件和文件夹
list1.add(file1[i]);
else
list2.add(file1[i]);
}
}
else
list2.add(tmp); //这个和第一个if相对应,即如果这个目录下存的是文件的话,直接加到list2链表中
}
}
public void loadfile() throws IOException{ //此处定义一个方法,这个方法是遍历list2链表,即存放所有文件的路径的链表
while(!list2.isEmpty()){
File tmp =(File)list2.removeFirst(); //获得第一个元素
File f = new File("tmp");
FileInputStream files = new FileInputStream(f); //定义一个文件输出流
String read = null ; //声明一个字符串read,用来存放从文件里读到的所有数据,这里如果不初始化的话会报错
for(int j = 0;j < f.length();j++)
{
read = String.valueOf(files.read());
}
String [] lines = read.split("\n"); //定义一个行数组,用来存放每一行的数据;
files.close();
}
}
}
这里遇到一个瓶颈,是这样的,我的比对思想是把文件夹得目录存到list1中,把文件的属性存到list2中,这个是方法files干的活,然后我得比较文件的差异,于是loadfile这个方法就先从list2这个存放了文件路径的链表开始遍历,然后最后把链表里第一个元素(也即是第一个文件)里的内容放到一个lines数组里(这个比对思想是按行比较),但是问题就来了,那么被比对的另外一个文件该怎么办呢,这个lines数组每循环一次就会被更新一次,这个该怎么办呢
拜托了,各位