之前在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;
}
}