|
|
|
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.MalformedURLException;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import jcifs.smb.SmbFile;import jcifs.smb.SmbFileInputStream;import jcifs.smb.SmbFileOutputStream;public class SmbCope2Server implements FtpFileCope{ private boolean first =true ; private String responseftpinfo =""; public static void main(String[] args){ } /** *** * 从smbMachine读取文件并存储到localpath指定的路径 * * @param smbMachine * 共享机器的文件,如smb://xxx:xxx@10.108.23.112/myDocument/测试文本.txt,xxx:xxx是共享机器的用户名密码 * @param localpath * 本地路径 * @return */ public static File readFromSmb(String smbMachine,String localpath){ File localfile=null; InputStream bis=null; OutputStream bos=null; try { SmbFile rmifile = new SmbFile(smbMachine); if(rmifile==null){ return null ; } String filename=rmifile.getName(); bis=new BufferedInputStream(new SmbFileInputStream(rmifile)); localfile=new File(localpath+File.separator+filename); bos=new BufferedOutputStream(new FileOutputStream(localfile)); int length=rmifile.getContentLength(); byte[] buffer=new byte[length]; Date date=new Date(); bis.read(buffer); bos.write(buffer); Date end=new Date(); int time= (int) ((end.getTime()-date.getTime())/1000); if(time>0) System.out.println("用时:"+time+"秒 "+"速度:"+length/time/1024+"kb/秒"); } catch (Exception e){ // TODO Auto-generated catch block System.out.println(e.getMessage()); }finally{ try { bos.close(); bis.close(); } catch (IOException e) {// // TODO Auto-generated catch block e.printStackTrace(); } } return localfile; }/** * * Description: 从本地上传文件到共享目录 * * @Version1.0 Sep 25, 2009 3:49:00 PM * * @param remoteUrl * 共享文件目录 * * @param localFilePath * 本地文件绝对路径 * */public void smbPut(String remoteUrl, String localFilePath) {InputStream in = null; OutputStream out = null;try {File localFile = new File(localFilePath);String fileName = localFile.getName();SmbFile remoteFile = new SmbFile(remoteUrl + "/");//System.out.println(remoteFile.getPath().split("@")[1].substring(remoteFile.getPath().split("@")[1].indexOf("/")+1,remoteFile.getPath().split("@")[1].lastIndexOf("/")+1));if(!remoteFile.exists())remoteFile.mkdirs();remoteFile = new SmbFile(remoteUrl + "/" + fileName);in = new BufferedInputStream(new FileInputStream(localFile)); out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));byte[] buffer = new byte[1024]; while (in.read(buffer) != -1) { out.write(buffer); buffer = new byte[1024];}} catch (Exception e) {e.printStackTrace();} finally {try {out.close();in.close();} catch (IOException e) {e.printStackTrace();}}}public static File readFromSmbList(String smbMachine,String localpath, String replaceString) {try {SmbFile rmifile = new SmbFile(smbMachine);SmbFile [] rmifilelist=rmifile.listFiles();for(int i=0,n=rmifilelist.length;i<n;i++){System.out.println(rmifilelist[i].toString());readFromSmb( rmifilelist[i].toString(),localpath);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;} public static boolean removeFile(File file) { return file.delete(); }@Overridepublic List ftpFile2Server(String ip, int port, String username,String password, String[] filepath, String[] filename,String ServerIp, int ServerPort, String ServerUsername,String ServerPassword, String[] ServerFilepath,String[] ServerFilename, String replaceString) {// TODO Auto-generated method stubList list =null ;if(doDownCopy( ip,port , username, password, filepath,filename)){list = doUpload(ServerIp, ServerPort, ServerUsername,ServerPassword, ServerFilepath, ServerFilename ,filename ,replaceString);}return list;} String filenamenotexit1=""; String filenamenotexit2="";private List doUpload(String ServerIp,int ServerPort,String ServerUsername, String ServerPassword,String ServerFilepath [] , String [] ServerFilename,String [] filename ,String replaceString) {// TODO Auto-generated method stubFtpClientUtil ftpUtil1 = new FtpClientUtil ( ServerIp ,ServerPort,ServerUsername,ServerPassword) ; if(!ftpUtil1.open()){ responseftpinfo=ServerIp+"ftp服务器上传时连接失败。请检查Ip端口用户名密码等信息。"; return null ; }List list = new ArrayList();try {List ServerFilenamelist =Arrays.asList(ServerFilename);List filenamelist =Arrays.asList(filename);for(int i=0,n=filenamelist.size();i<n;i++){Map dateMap = new HashMap(); dateMap.put("productName", ServerFilename[i]); dateMap.put("productDate", replaceString);// dateMap.put("productInf", replaceString); list.add(dateMap);// FtpHelper.upload(ServerIp, "21", ServerUsername, ServerPassword, "/ftp_user/"+filenamelist.get(i).toString(), ServerFilepath[i]+"/"+ServerFilenamelist.get(i).toString());ftpUtil1.upload("/smb_user/"+filenamelist.get(i).toString(),ServerFilenamelist.get(i).toString(),ServerFilepath[i]);filenamenotexit1=filename[i];filenamenotexit2=ServerFilename[i];responseftpinfo=ServerIp+"ftp服务器上传成功.上传后的文件为"+ServerFilenamelist.get(i).toString();System.out.println("----"+filenamenotexit1+"---"+ServerFilepath[i]+"/"+filenamenotexit2);}} catch (Exception e) {System.out.println(filenamenotexit1+ServerFilepath+filenamenotexit2);responseftpinfo=ServerIp+"ftp服务器上传文件时失败,上传的路径可能有误(应该为全路径)。";e.printStackTrace();}finally{if(ftpUtil1!=null){ftpUtil1.close();}}return list;}Stringfilenamenotexit ="" ;private boolean doDownCopy(String ip, int port, String username,String password, String[] filepath, String[] filename) {// TODO Auto-generated method stub boolean down = false ;// String smbMachine="smb://administrator:pe01AT&*(@10.28.16.28/public/detu/";// FtpClientUtil ftpUtil = new FtpClientUtil ( ip ,port,username,password) ;// if(!ftpUtil.open()){// responseftpinfo=ip+"ftp服务器下载时连接失败。请检查Ip端口用户名密码等信息。";// return false ;// }// try {File file1 =new File("/smb_user/");if(!file1.exists()) file1.mkdirs();for(int i=0 ; i<filename.length;i++){ String smbMachine="smb://"+username+":"+password+"@"+ip+filepath[i]+"/"+filename[i];//ftpUtil.download(filepath[i]+"/"+filename[i],"/ftp_user/"+filename[i]); readFromSmb( smbMachine, "/smb_user/");filenamenotexit=filename[i];down = true ;}first=false;responseftpinfo=ip+"ftp服务器下载成功";} catch (Exception e) {System.out.println("----数据库录入的文件在服务器上不存在---该路径和文件"+filepath+"/"+filenamenotexit+"------");//e.printStackTrace();down =false ;responseftpinfo=ip+"ftp服务器下载失败"+"----数据库录入的文件在服务器上不存在---该路径和文件"+filepath+"/"+filenamenotexit+"------";}finally{}return down ;}@Overridepublic List ftpFile2Server(String ip, int port, String username,String password, String[] filepath, String[] filename,String ServerIp, int ServerPort, String ServerUsername,String ServerPassword, String[] ServerFilepath,String[] ServerFilename, String[] replaceString) {// TODO Auto-generated method stubdoDownCopyfirst( ip,port , username, password, filepath,filename,replaceString); List list = doUploadfirst(ServerIp, ServerPort, ServerUsername,ServerPassword, ServerFilepath, ServerFilename ,filename,replaceString);return list;}private List doUploadfirst( String ServerIp,int ServerPort,String ServerUsername, String ServerPassword,String ServerFilepath [] , String [] ServerFilename,String [] filename, String replaceString []) {// TODO Auto-generated method stubFtpClientUtil ftpUtil1; List datelist = new ArrayList ();for(int i=0 ; i<filename.length;i++){ File filefirst= new File("/smb_temp_first_down/"+filename[i].replace(replaceString[i], "")+"/"); File filefir[]=filefirst.listFiles(); int startIndex =filename[i].indexOf(replaceString[i]);int endIndex =filename[i].indexOf(replaceString[i]);int startIndex1 =ServerFilename[i].indexOf(replaceString[i]);int endIndex1 =ServerFilename[i].indexOf(replaceString[i]); for(int j=0;j<filefir.length;j++){ ftpUtil1 = new FtpClientUtil ( ServerIp ,ServerPort,ServerUsername,ServerPassword) ; if(!ftpUtil1.open()){ responseftpinfo=ServerIp+"ftp服务器上传时连接服务器失败。请检查Ip端口用户名密码等信息。"; return null ; } try { String romtfilename = ServerFilename[i].substring(0,startIndex1)+filefir[j].getName().substring( startIndex,startIndex+replaceString[i].length()) +ServerFilename[i].substring(startIndex1+replaceString[i].length()); ftpUtil1.upload("/smb_temp_first_down/"+filename[i].replace(replaceString[i],"")+"/"+ filefir[j].getName(),romtfilename,ServerFilepath[i]); Map dateMap = new HashMap(); dateMap.put("productName", romtfilename); dateMap.put("productDate", filefir[j].getName().substring( startIndex,startIndex+replaceString[i].length())); datelist.add(dateMap); System.out.println("/smb_temp_first_down/"+ romtfilename+ filefir[j].getName().substring( startIndex,startIndex+replaceString[i].length())+"=---------"+filename[i].replace(replaceString[i],"")+"/"+filefir[j].getName()+ServerFilepath[i]+"/"+filefir[j].getName()); }catch (Exception e) {System.out.println(filenamenotexit1+ServerFilepath+filenamenotexit2); responseftpinfo=ServerIp+"ftp服务器上传失败。路径或文件名有误。原文件名是"+filefir[j].getName() ;e.printStackTrace();}finally{if(ftpUtil1!=null){ftpUtil1.close();}} responseftpinfo=ServerIp+"ftp服务器图片上传成功。上传了"+filefir.length+"个图片";} }File filelocal= new File("/smb_temp_first_down/");if(filelocal.exists())this.deleteFile(filelocal);return datelist;}private boolean doDownCopyfirst(String ip, int port, String username,String password, String[] filepath, String[] filename,String[] replaceString) { File file2 =new File("/smb_temp_first_down/"); if(!file2.exists()) file2.mkdirs();// FtpClientUtil ftpUtil = new FtpClientUtil ( ip ,port,username,password) ;// if(!ftpUtil.open()){// responseftpinfo=ip+"ftp服务器下载时连接失败。请检查Ip端口用户名密码等信息。";// return false ;// } try {for(int i=0 ; i<filename.length;i++){ String smbMachine="smb://"+username+":"+password+"@"+ip+filepath[i]+"/";File file3 =new File("/smb_temp_first_down/"+filename[i].replace(replaceString[i], "")+"/"); if(!file3.exists()) file3.mkdirs();//System.out.println(ftpUtil.cd(filepath[i]+"/"));//List filelist =ftpUtil.getFileNameList(".");SmbFile rmifile = new SmbFile(smbMachine);SmbFile [] rmifilelist=rmifile.listFiles();List filelist =java.util.Arrays.asList(rmifilelist);int startIndex =filename[i].indexOf(replaceString[i]); int endIndex =filename[i].indexOf(replaceString[i]);if(startIndex==-1){continue ;}SimpleDateFormat dateformat1=new SimpleDateFormat(replaceString[i]); for(int j=0 ; j<filelist.size();j++){ if(!((filelist.get(j).toString().substring(filelist.get(j).toString().lastIndexOf("/")+1).length())==filename[i].length())) { continue;// ==filename[i].length() } boolean date =false; try { System.out.println(filelist.get(j).toString().substring(filelist.get(j).toString().lastIndexOf("/")+1).substring(startIndex)); Date a1=dateformat1.parse(( filelist.get(j).toString().substring(filelist.get(j).toString().lastIndexOf("/")+1).substring( startIndex,startIndex+replaceString[i].length()))); date =true; } catch (ParseException e) { // TODO Auto-generated catch block continue; } if( date&&filename[i].replace(replaceString[i], "").equals(filelist.get(j).toString().substring(filelist.get(j).toString().lastIndexOf("/")+1).substring(0, startIndex)+filelist.get(j).toString().substring(filelist.get(j).toString().lastIndexOf("/")+1).substring(endIndex+replaceString[i].length()))){ System.out.println(filepath[i]+"/"+filelist.get(j).toString().substring(filelist.get(j).toString().lastIndexOf("/"))+"-----"+"/ftp_temp_first_down/"+filename[i].replace(replaceString[i], "")+"/"+filelist.get(j).toString());// ftpUtil.download(filepath[i]+"/"+filelist.get(j).toString(),"/ftp_temp_first_down/"+filename[i].replace(replaceString[i], "")+"/"+filelist.get(j).toString()); readFromSmb( filelist.get(j).toString(),"/smb_temp_first_down/"+filename[i].replace(replaceString[i], "")+"/"); } } }responseftpinfo=ip+"ftp服务器下载成功";} catch (Exception e) {System.out.println("----数据库录入的文件在服务器上不存在---该路径和文件"+filepath.toString()+"/"+filenamenotexit+"------");responseftpinfo=ip+"ftp服务器下载失败"+"----数据库录入的文件在服务器上不存在---该路径和文件"+filepath.toString()+"/"+filenamenotexit+"------";e.printStackTrace();}finally{//if(ftpUtil!=null){//ftpUtil.close();//}}return true;}private void deleteFile(File file){ if(file.exists()){ if(file.isFile()){ file.delete(); }else if(file.isDirectory()){ File files[] = file.listFiles(); for(int i=0;i<files.length;i++){ this.deleteFile(files[i]); System.out.println("删除本地临时的文件!"+files[i].getName()+'\n'); } } file.delete(); }else{ System.out.println("所删除的文件不存在!"+'\n'); } }@Overridepublic List ftpFile2Server(String ip, int port, String username,String password, String filepath, String filename, String ServerIp,int ServerPort, String ServerUsername, String ServerPassword,String ServerFilepath, String ServerFilename, String replaceString) {// TODO Auto-generated method stubString [] str= new String[1]; String [] str1= new String[1]; String [] str2= new String[1]; String [] str3= new String[1]; String [] str4= new String[1]; str [0]=filepath; str1 [0]=filename; str2 [0]=ServerFilepath; str3 [0]=ServerFilename; str4 [0]=replaceString; return ftpFile2Server( ip, port, username, password, str, str1, ServerIp, ServerPort, ServerUsername, ServerPassword, str2, str3, str4);}@Overridepublic List ftpFile2ServerOne(String ip, int port, String username,String password, String filepath, String filename, String ServerIp,int ServerPort, String ServerUsername, String ServerPassword,String ServerFilepath, String ServerFilename, String replaceString) {// TODO Auto-generated method stubString [] str= new String[1]; String [] str1= new String[1]; String [] str2= new String[1]; String [] str3= new String[1]; str [0]=filepath; str1 [0]=filename; str2 [0]=ServerFilepath; str3 [0]=ServerFilename; return ftpFile2Server( ip, port, username, password, str, str1, ServerIp, ServerPort, ServerUsername, ServerPassword, str2, str3, replaceString);}@Overridepublic String getResponseftpinfo() {// TODO Auto-generated method stubreturn responseftpinfo;}} |
|