copy一个文件到另一个文件,win+linux

之前在windows下开发的,没有注意系统之间的区别,结果上线之后,关于文件路径这一块就报错了。关于copy一个文件到另一个文件的实现总结如下:

(1)IoCopy.java

package com.loan.security.plug;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/** 
* @ClassName: IoCopy 
* @Description: TODO(将使用的文件copy到指定文件夹,图片-use) 
* @author jiayq
* @date 2016年10月28日 上午9:53:20 
*  
*/
public class IoCopy {
    /** 
    * @Title: copy 
    * @Description: TODO(文件copy) 
    * @param @param f 文件
    * @param @param f1 指定文件夹
    * @param @throws IOException    设定文件 
    * @return void    返回类型 
    * @throws 
    */
    public void copy(File f,File f1) throws IOException{    //复制文件的方法!
        if(!f1.exists()){
            f1.mkdir();
        }
        if(!f1.exists()){//路径判断,是路径还是单个的文件
            File[] cf = f.listFiles();
            for(File fn : cf){
                if(fn.isFile()){
                    FileInputStream fis = new FileInputStream(fn);
                    FileOutputStream fos = new FileOutputStream(f1 + "\\" +fn.getName());
                    byte[] b = new byte[1024];
                    int i = fis.read(b);
                    while(i != -1){
                        fos.write(b, 0, i);
                        i = fis.read(b);
                    }
                    fis.close();
                    fos.close();
                }else{
                    File fb = new File(f1 + "\\" + fn.getName());
                    fb.mkdir();
                    if(fn.listFiles() != null){//如果有子目录递归复制子目录!
                        copy(fn,fb);
                    }
                }
            }
        }else{
            FileInputStream fis = new FileInputStream(f);
            FileOutputStream fos = new FileOutputStream(f1 + "\\" +f.getName());
            byte[] b = new byte[1024];
            int i = fis.read(b);
            while(i != -1){
                fos.write(b, 0, i);
                i = fis.read(b);
            }
            fis.close();
            fos.close();
        }
    }
}

(2)IoCopyController.java

package com.loan.security.web.controller;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.servlet.ServletContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;

import com.loan.security.plug.IoCopy;

/** 
* @ClassName: IoCopyController 
* @Description: TODO(将已用图片保存在use下,上传文件将在每天三点删除) 
* @author jiayq
* @date 2016年10月27日 下午1:32:12 
*  
*/
@Controller
@RequestMapping("/io")
public class IoCopyController {
	private final static Log log = LogFactory.getLog("myTest1");
	
	private String[] p;
	private String picName;
	private String relativePathFrom ;
	private String relativePathTo;
	private String url;
	@Value("${pro.name}")
	private String proName;
	/** 
	* @Title: copyPicUrl 
	* @Description: TODO(图片copy) 
	* @param @param picUrl 新图片
	* @param @param oldUrl 旧图片
	* @param @return    设定文件 
	* @return String    返回类型 
	* @throws 
	*/
	@RequestMapping("/copyUrl")
	@ResponseBody
	public boolean copyPicUrl(String picUrl,String oldUrl){
			IoCopy ioCopy=new IoCopy();
			String os = System.getProperty("os.name");
			//非windows系统
			if(!os.toLowerCase().startsWith("win")){
				url=picUrl.split(proName)[1];
				 p=url.split("/");
				 picName=p[p.length-1];
				 relativePathFrom = url;
				 relativePathTo = "/static/ueditor/jsp/upload/use/";
			}
			//windows系统
			else{
				 url=picUrl.split(proName)[1].replace("/", "\\\\");
				 p=url.split("\\\\");
				 picName=p[p.length-1];
				 relativePathFrom = url;
				 relativePathTo = "\\static\\ueditor\\jsp\\upload\\use\\";
			}
			WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();  
			ServletContext servletContext = webApplicationContext.getServletContext(); 
			String absolutePathFrom = servletContext.getRealPath(relativePathFrom);
			String absolutePathTo = servletContext.getRealPath(relativePathTo);
			 File ff=new File(absolutePathTo+File.separator+picName);
			log.info(" ----> absolutePathTo= "+ff.getAbsolutePath()+"   file-separator="+File.separator);
			if(!(ff.isFile()&&ff.exists())){//use文件夹中不存在此文件时copy
				File f=new File(absolutePathFrom);
				File f1=new File(absolutePathTo);
				try {
					ioCopy.copy(f,f1);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		return true;
	}
	
}


你可能感兴趣的:(java)