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

来源:互联网 发布:pc6官方网站下载软件 编辑:程序博客网 时间:2024/06/07 03:54

之前在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")@ResponseBodypublic 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文件夹中不存在此文件时copyFile f=new File(absolutePathFrom);File f1=new File(absolutePathTo);try {ioCopy.copy(f,f1);} catch (IOException e) {e.printStackTrace();}}return true;}}


阅读全文
0 0
原创粉丝点击