A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Nullifier 中级黑马   /  2014-10-5 10:06  /  1150 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package mytest;

  2. import java.io.*;
  3. import java.util.Iterator;
  4. import java.util.TreeSet;



  5. public class CreateFile {

  6.         /**
  7.          * @param args
  8.          * @throws IOException
  9.          */
  10.         public static void main(String[] args) throws IOException {
  11.                 // TODO Auto-generated method stub
  12.                 //File f1=new File("E:\\mt3");
  13.                 File f2=new File("E:\\mt4");
  14.                 //File f2=new File("E:\\mt2");       
  15.                 try {
  16.                         long startTime=System.currentTimeMillis();
  17.                         //delDoubleFile(f1,f2);
  18.                         //findSingleFile(f2);
  19.                         findSingleFile(f2,"mt2");//参数一是被检测的文件不能带有文件夹   参数二是重复元素复制到哪个文件夹中
  20.                         //reName(f1);
  21.                         //reName(f2);
  22.                         long endTime=System.currentTimeMillis();
  23.                         timechange(endTime-startTime);
  24.                 } catch (Exception e) {
  25.                         // TODO Auto-generated catch block
  26.                         e.printStackTrace();
  27.                 }       
  28.         }
  29.         private static void timechange(long ls) {
  30.                 // TODO Auto-generated method stub
  31.                   int second=(int) (ls/1000);
  32.                   int h = 0;
  33.                   int d = 0;
  34.                   int s = 0;
  35.                   int temp = second%3600;
  36.                        if(second>3600){
  37.                          h= second/3600;
  38.                               if(temp!=0){
  39.                          if(temp>60){
  40.                          d = temp/60;
  41.                       if(temp%60!=0){
  42.                          s = temp%60;
  43.                       }
  44.                       }else{
  45.                          s = temp;
  46.                       }
  47.                      }
  48.                     }else{
  49.                         d = second/60;
  50.                      if(second%60!=0){
  51.                         s = second%60;
  52.                      }
  53.                     }

  54.                  
  55.                 System.out.println("用时"+h+"时"+d+"分"+s+"秒");
  56.         }
  57.         /*private static synchronized void fileCopyDemo(File file1,File file2,int name) throws Exception{//将两个文件复制到同一个文件夹中
  58.                 File objectDir1=new File("E:\\mt2"+"\\"+name);
  59.                 objectDir1.mkdir();//创建文件夹
  60.                
  61.                 File objectPath1=new File ("E:\\mt2"+"\\"+name+"\\"+file1.getName()+".jpg");
  62.                 FileInputStream fis1=new FileInputStream(file1);
  63.                 FileOutputStream fos1=new FileOutputStream(objectPath1);
  64.                 byte []byt1=new byte[1024];
  65.                 int len1=0;
  66.                 while((len1=fis1.read(byt1))!=-1){
  67.                         fos1.write(byt1);
  68.                         fos1.flush();
  69.                 }
  70.                 fis1.close();
  71.                 fos1.close();
  72.                 System.out.println(name);
  73.                
  74.                 File objectPath2=new File ("E:\\mt2"+"\\"+name+"\\"+file2.getName()+".jpg");
  75.                 FileInputStream fis2=new FileInputStream(file2);
  76.                 FileOutputStream fos2=new FileOutputStream(objectPath2);
  77.                 byte []byt2=new byte[1024];
  78.                 int len2=0;
  79.                 while((len2=fis2.read(byt2))!=-1){
  80.                         fos2.write(byt2);
  81.                         fos2.flush();
  82.                 }
  83.                 fis2.close();
  84.                 fos2.close();
  85.                 System.out.println(name);
  86.                
  87.         }
  88.         */
  89.         private static void fileCopyDemo(File file,int name) throws Exception{//按数字重命名
  90.                 File objectPath=new File ("E:\\mt2\\"+name+".jpg");
  91.                 FileInputStream fis=new FileInputStream(file);
  92.                 FileOutputStream fos=new FileOutputStream(objectPath);
  93.                 byte []byt=new byte[1024];
  94.                 int len=0;
  95.                 while((len=fis.read(byt))!=-1){
  96.                         fos.write(byt);
  97.                         fos.flush();
  98.                 }
  99.                 fos.close();
  100.                 System.out.println(name);
  101.                
  102.         }
  103.         private static void fileCopyDemo(File file,String object) throws Exception{//打印到目标文件地址
  104.                 File objectPath=new File ("E:\\"+object+"\\"+file.getName());
  105.                 FileInputStream fis=new FileInputStream(file);
  106.                 FileOutputStream fos=new FileOutputStream(objectPath);
  107.                 byte []byt=new byte[1024];
  108.                 int len=0;
  109.                 while((len=fis.read(byt))!=-1){
  110.                         fos.write(byt);
  111.                         fos.flush();
  112.                 }
  113.                 fos.close();
  114.                 fis.close();
  115.                 System.out.println("正在将重复元素"+file.getName()+"复制到"+object+"文件夹");
  116.         }

  117.         private static  void findSingleFile(File file1,String copyobjectpath) throws Exception {
  118.                 // TODO Auto-generated method stub

  119.                 File []files1=file1.listFiles();
  120.                 TreeSet<File> tchongfu=new TreeSet<File>();
  121.                 TreeSet<File> tdayin=new TreeSet<File>();
  122.                 int count=0;
  123.                 for(int x=0;x<files1.length;x++){
  124.                         for(int y=x+1;y<files1.length;y++){
  125.                                 if(files1[x].length()==files1[y].length()){
  126.                                         synchronized(file1.getClass()){       

  127.                                                 byte[] data1 = new byte[(int) files1[x].length()];
  128.                                                 byte[] data2 = new byte[(int) files1[y].length()];
  129.                                                 Boolean flag=false;
  130.                                                 FileInputStream rfis1 = new FileInputStream(files1[x]);
  131.                                                 FileInputStream rfis2 = new FileInputStream(files1[y]);
  132.                                                 //分别将两个文件的内容读入缓冲区
  133.                                                 rfis1.read(data1);
  134.                                                 rfis2.read(data2);
  135.                                                
  136.                                                 for (int i=0; i<data1.length; i++) {
  137.                                                         //只要有一个字节不同,两个文件就不一样
  138.                                                         if (data1[i] == data2[i]) {
  139.                                                                  flag=true;
  140.                                                                  continue;
  141.                                                         }
  142.                                                         else{
  143.                                                                  flag=false;
  144.                                                                  break;
  145.                                                         }
  146.                                                 }
  147.                                                 if(flag){
  148.                                                         count++;
  149.                                                         rfis1.close();
  150.                                                         rfis2.close();
  151.                                                         tchongfu.add(files1[y]);
  152.                                                         tdayin.add(files1[x]);
  153.                                                         tdayin.add(files1[y]);
  154.                                                        
  155.                                                         //fileCopyDemo(files1[y],files1[x],count);
  156.                                                         //fileCopyDemo(files1[x],count);//操作流的时候不能删除文件                                                       
  157.                                                         //System.out.println(files1[y].getName()+"与"+files1[x].getName()+"重复,已复制到文件夹");
  158.                                                         //files1[y].delete();
  159.                                                         //System.out.println(files1[y].getName()+"已经删除");
  160.                                                 }
  161.                                                
  162.                                         }       
  163.                                 }
  164.                         }
  165.                 }
  166.                 System.out.println("共搜索到"+tchongfu.size()+"个重复");
  167.                 printFile(tdayin,copyobjectpath);
  168.                 System.out.println("重复元素复制到"+copyobjectpath+"文件夹成功");
  169.                 System.out.println("寻找完毕,5秒后开始删除重复元素");
  170.                 delFile(tchongfu);
  171.                 System.out.println("已删除所有重复的元素");
  172.                
  173.                


  174.         }
  175.        
  176.         private static void printFile(TreeSet<File> tdayin,String object) throws Exception {
  177.                 // TODO Auto-generated method stub
  178.                
  179.                 Iterator it =tdayin.iterator();
  180.                 while(it.hasNext())
  181.                 {
  182.                         String f= ((File)it.next()).getName();
  183.                         fileCopyDemo((new File("E:\\mt4\\" + f)),object);
  184.                 }
  185.                
  186.         }
  187.         private static void delFile(TreeSet<File> ts) throws Exception{
  188.                 Iterator it =ts.iterator();
  189.                 while(it.hasNext())
  190.                 {        String sss=((File)it.next()).getName();
  191.                         System.out.println(sss+"删除"+((new File("E:\\mt4\\" + sss)).delete()?"成功":"失败"));
  192.                 }
  193.         }
  194.        
  195.         private static int getNumber(File file) {//得到文件个数
  196.                 // TODO Auto-generated method stub
  197.                 int i=0;
  198.                 File []fis=new File[1];
  199.                 File []files=file.listFiles();
  200.                 for(int x=0;x<files.length;x++){
  201.                         if(files[x].isDirectory()){
  202.                                 getNumber(files[x]);
  203.                         }
  204.                         else{
  205.                                 i++;
  206.                         }
  207.                 }
  208.                 return i;
  209.         }
  210.        
  211.         private static void reName(File file) throws Exception {
  212.                 // TODO Auto-generated method stub
  213.                 File[] fis = getFileArray(file);
  214.                 System.out.println(fis.length);
  215.                 for(int x=0;x<fis.length;x++){
  216.                         fileCopyDemo(fis[x],x);
  217.                 }
  218.                
  219.         }
  220.        
  221.         private static File[] getFileArray(File file) throws Exception {//得到文件数组
  222.                 File []fis=new File[getNumber(file)];
  223.                 File []files=file.listFiles();
  224.                 for(int x=0;x<files.length;x++){
  225.                         if(files[x].isDirectory()){
  226.                                 reName(files[x]);
  227.                         }
  228.                         else{
  229.                                 fis[x]=files[x];
  230.                         }
  231.                 }
  232.                 return fis;
  233.         }
  234.                
  235.         private static void delDoubleFile(File file1,File file2) throws Exception {
  236.                 // TODO Auto-generated method stub
  237.                 File []files1=file1.listFiles();
  238.                 File []files2=file1.listFiles();
  239.                 for(int x=0;x<files1.length;x++){
  240.                         for(int y=0;y<files2.length;y++){
  241.                                 if(files1[x].length()==files2[y].length()){
  242.                                         files2[y].delete();
  243.                                 }
  244.                         }
  245.                 }
  246.                
  247.                
  248.         }
  249.        
  250.        
  251. }

复制代码
主要是用来对图片判断,E盘新建个文件夹mt4把要检索的文件扔进去运行就可以了。可能写复杂了,希望大神有更高效的

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 写代码辛苦了

查看全部评分

6 个回复

倒序浏览
不懂。。。正在学习中。。。
回复 使用道具 举报
x564573138 发表于 2014-10-5 10:12
不懂。。。正在学习中。。。

这简单,等学完IO就能做出来
回复 使用道具 举报
读的太累,看一半看不下去了~
回复 使用道具 举报
代码好长,我还没看到那
回复 使用道具 举报
这么长的代码。。。看的我都晕了
回复 使用道具 举报
大哥你代码这么长,都蒙圈了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马