**近期学习过程中,需要对图片分类结果进行可视化展示,代码结果有图片的名称对应的类别,现需要将属于同一个类别的图片复制或移动到相同的文件夹中。
检索发现没有好用的代码,于是自己改改删删有了以下版本,新手上路,请多指教,感谢!

**

**案列介绍:
下图有六张图片,需要按照1.txt中的分类结果将图片进行分类,通过以下代码,可以实现将图片复制或移动到对应类别文件夹下的功能,如图3所示。

两个代码的区别在于:

1.复制代码完成后,原文件夹图片复制后依然存在;

2.移动代码完成后,原文件夹图片移动后不存在。**

java 图片移动代码 java移动图片到指定位置_List


java 图片移动代码 java移动图片到指定位置_System_02


java 图片移动代码 java移动图片到指定位置_List_03

1.复制目标图片至指定文件夹

package movepicture;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/*
 * 这个是图片,对应movepic
 */
public class copy_move {
	//方法importCsv的作用是读取txt,在这里用于读取需要移动的图片ID
	  public static List<String> importCsv(File file){
	        List<String> dataList=new ArrayList<String>();
	        
	        BufferedReader br=null;
	        try { 
	            br = new BufferedReader(new FileReader(file));
	            String line = ""; 
	            while ((line = br.readLine()) != null) { 
	                dataList.add(line);
	            }
	        }catch (Exception e) {
	        }finally{
	            if(br!=null){
	                try {
	                    br.close();
	                    br=null;
	                } catch (IOException e) {
	                    e.printStackTrace();
	                }
	            }
	        }
	        return dataList;
	    }
	  
	  private static void copyFile(File srcFile,File destFile) throws IOException {
			//该方法为复制文件,srcFile是原文件所在地址,destFile是目标文件所在地址
		   
		   File[] fileArray1 = srcFile.listFiles();
		   File[] fileArray2 = destFile.listFiles();
		   
		   BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
		   BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
		   byte[] bys = new byte[1024];
		   int len = 0;
		   while ((len = bis.read(bys)) != -1) 
		      {
		      bos.write(bys, 0, len);
		      }
		   bos.close();
		   bis.close();
		  }	
	  
public static void main(String[] args) throws IOException {
/*
 * sourceFile 是所有的图片初始存放的集合
 * dataList 是图片分类的txt 格式:class p1 p2 (class为类别,p1 p2为图片名称,中间用空格分开),后附图
  * 用importCsv方法读取datalist中每一个图片id用于分类
 * targetFile 是图片类别的文件夹,设置该对象的目的是用于判断类别所在文件夹是否为空,为空的话用mkdir创建一个
 * as[0]为类别的文件夹名称,如上例中的1、2 ,as[m]为图片的名称
 * */
	File sourceFile = new File("******\\testcopy\\all");
    List<String> dataList=importCsv(new File("******\\testcopy\\1.txt"));
        if(dataList!=null && !dataList.isEmpty()){
            for(int i=0; i<dataList.size();i++ ){
                    String s=dataList.get(i);
                    String as[] = s.split("\\s+");
                for(int m=1;m<as.length;m++) {
                	File targetFile = new File("******\\testcopy\\tesy\\"+as[0]+"\\");
                	File srcFile = new File(sourceFile+"\\"+as[m]+".jpg");
                	File destFile = new File(targetFile+"\\"+as[m]+".jpg");
                	
//                	下面两行用于输出需要复制的图片地址用于检查
//                    System.out.println(sourceFile+"\\"+as[m]+".jpg");//为srcFile
//                    System.out.println(targetFile+"\\"+as[m]+".jpg");// 为destFile
                    if (!targetFile.exists()) {
        	            targetFile.mkdir();
        	        }
//                    调用copyFile方法,依次复制目标图片到指定位置
                    copyFile(srcFile,destFile);
                }
            }       
        }
	}
}

2.移动目标图片至指定文件夹

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class movepic {
	
	//importCsv读取txt中图片的ID
	  public static List<String> importCsv(File file){
	        List<String> dataList=new ArrayList<String>();	     
	        BufferedReader br=null;
	        try { 
	            br = new BufferedReader(new FileReader(file));
	            String line = ""; 
	            while ((line = br.readLine()) != null) { 
	                dataList.add(line);
	            }
	        }catch (Exception e) {
	        }finally{
	            if(br!=null){
	                try {
	                    br.close();
	                    br=null;
	                } catch (IOException e) {
	                    e.printStackTrace();
	                }	                
	            }
	        }
	        return dataList;
	    }
	  

	    private static  void moveFile2(File sourceFile,File targetFile) {
	    	//该方法为复制文件,sourceFile源文件夹路径(存放图片路径), targetFile是目标文件夹路径(没有会自动创建)
	        File[] fileArray1 = sourceFile.listFiles();
	        File[] fileArray2 = targetFile.listFiles();
	        for (File file : fileArray1) {          
//	        	SUFFIX用于判断指定图片是否存在,如果存在就不移动并且输出“文件已存在”
	            	if (file.getName().contentEquals(SUFFIX)) {
	            		targetFile = new File( targetFile + "\\"+file.getName());
	                    if (targetFile.exists()) {
	                        System.out.println("文件已存在");
	                    } else {            	
	                        file.renameTo(targetFile);
	                        System.out.println("移动文件成功");
	                    }
	                }       
	            }
	        }
	   
	    
		public static String SUFFIX = null; 

	    public static void main(String[] args) {

	    	// 源文件夹路径(存放图片路径)
	    	File sourceFile = new File("******\\testcopy\\all");
	      //目标文件夹路径(没有会自动创建)
          //图片id的地址
	         List<String> dataList=importCsv(new File("******\\testcopy\\1.txt"));
		        if(dataList!=null && !dataList.isEmpty()){
		            for(int i=0; i<dataList.size();i++ ){
		                    String s=dataList.get(i);
		                    String as[] = s.split("\\s+");
		                for(int m=1;m<as.length;m++) {
		                	File targetFile = new File("******\\testcopy\\tesy\\"+as[0]+"\\");
		                    SUFFIX = as[m] + ".jpg";
		                    if (!targetFile.exists()) {
		        	            targetFile.mkdir();
		        	        }
//		                    调用moveFile2方法,依次移动目标图片到指定位置
		        	        moveFile2(sourceFile,targetFile);
		                }
		            }       
	             }
	    	}
	    }