删除同文件夹下相同的文件(HashSet和file)

来源:互联网 发布:linux源码编译mysql 编辑:程序博客网 时间:2024/06/14 22:54
package com.homework.homework01;/** * 需求: * 1.指定一个路径,删除其下面(含子文件夹中)的同名,同大小,同修改时间 * 的重复文件,只保留一个(利用集合HashSet<MyFile>). * */import java.io.File;import java.util.HashSet;/* * 思路: * 1.获取目录当中所有的文件,遍历,把文件的信息进行识别,如果在集合中存储了文件就删除这个文件。 *   如果没有存储就加入到集合当中,下一次遇到时就删除。 * */public class Homework01 {static HashSet<MyFile>set = new HashSet<>();public static void main(String[] args) {File file = new File("c:\\pro");deleteFile(file);}/** * 步骤: * 1.获取文件夹当中所有的文件。 * 2.判断获取到的对象是文件还是文件夹。 * 如果是问价,创建一个myFile对象用来存储当前文件的信息,判断容器中是否还包含了这个文件。 * 如果是文件夹,就还要执行这个判断遍历的过程。 * */public static void deleteFile(File file){File[] files = file.listFiles();if(files!=null){for(File file2 : files){if(file2.isFile()){MyFile myfile = new MyFile(file2.getName(), file2.length(), file2.lastModified());if(set.contains(myfile)){file2.delete();}else{set.add(myfile);System.out.println(myfile);}}else{deleteFile(file2);}}}}}class MyFile{private String name;private long length;private long modifiedTime;//修改时间public String getName() {return name;}public void setName(String name) {this.name = name;}public long getLength() {return length;}public void setLength(long length) {this.length = length;}public long getModifiedTime() {return modifiedTime;}public void setModifiedTime(long modifiedTime) {this.modifiedTime = modifiedTime;}public MyFile() {super();// TODO Auto-generated constructor stub}public MyFile(String name, long length, long modifiedTime) {super();this.name = name;this.length = length;this.modifiedTime = modifiedTime;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + (int) (length ^ (length >>> 32));result = prime * result + (int) (modifiedTime ^ (modifiedTime >>> 32));result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;MyFile other = (MyFile) obj;if (length != other.length)return false;if (modifiedTime != other.modifiedTime)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}@Overridepublic String toString() {return "MyFile [name=" + name + ", length=" + length + ", modifiedTime=" + modifiedTime + "]";}}

1 0