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 block
e.printStackTrace();
}
return null;
}
public static boolean removeFile(File file) {
return file.delete();
}
@Override
public 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 stub
List 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 stub
FtpClientUtil 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;
}
String filenamenotexit ="" ;
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 ;
}
@Override
public 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 stub
doDownCopyfirst( 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 stub
FtpClientUtil 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');
}
}
@Override
public 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 stub
String [] 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);
}
@Override
public 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 stub
String [] 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);
}
@Override
public String getResponseftpinfo() {
// TODO Auto-generated method stub
return responseftpinfo;
}
}
分享到:
相关推荐
在Java编程环境中,有时我们需要与Windows操作系统进行交互,例如访问共享目录并下载其中的文件。这个过程涉及到几个关键的技术点,包括系统调用、网络通信和文件操作。在这个场景下,我们将通过`SmbUtils.java`和`...
### Java操作Windows共享目录的方法介绍 #### 一、SMB协议概述 SMB(Server Message Block)协议,也称为CIFS(Common Internet File System),是一种客户端/服务器类型的网络协议,主要用于提供共享访问文件、...
java访问linux;通过linux主机ip,端口,用户名,密码,获取linux链接,输入文件路径可批量的下载linux文件,mian函数为测试代码
Java编程语言在访问Windows共享文件夹时,通常会利用第三方库如JCIFS(Java CIFS Client)来实现。JCIFS(Java Community Internet File System)是一个完全用Java编写的开源框架,它实现了SMB(Server Message ...
在Java编程环境中,读取Windows共享文件夹的内容并将其保存到本地是一项常见的任务,尤其在分布式系统或跨平台协作中。下面将详细讲解如何通过Java实现这一功能,以及涉及的相关知识点。 首先,Java中没有内置的...
共享文件即是在局域网内的某台机器上设定一个共享目录,其他机器可以通过网络路径访问这些文件。 要实现Java读取局域网共享文件,主要涉及以下步骤和知识点: 1. **网络路径表示**:Java中,网络路径通常以UNC...
Java远程共享目录的操作代码 Java远程共享目录的操作代码是指使用Java语言来操作远程共享目录的实现代码。这种操作代码非常重要,因为它涉及到文件下载和上传到远程共享目录,特别是在涉及到支付文件时,需要确保...
而“java共享聊天器目录”这个主题,似乎涉及到使用Java技术开发一个可以多人交互的在线聊天应用程序。在这个项目中,前端部分可能使用了HTML、CSS、DIV和JavaScript来创建用户界面和实现动态功能。 HTML...
接下来,我们将深入探讨JAVA实现局域网桌面共享的相关知识点。 首先,JAVA是一种广泛使用的跨平台编程语言,它的网络编程能力强大,适合处理局域网内的通信问题。实现桌面共享,关键在于创建一个服务器端应用,用于...
java 中算法,支持从windows 局域网共享目录中 从后台 下载 文件到本地,以便于解析和执行,上传等
Java在Windows环境中实现文件共享涉及多个关键知识点,包括文件I/O操作、网络编程以及系统权限配置。以下将详细阐述这些内容: 1. **Java文件I/O操作**:Java提供了丰富的API来处理文件读写和目录操作。核心类如`...
在Java编程环境中,处理共享文件是一项常见的任务,特别是在企业级应用中,可能需要访问网络上的文件系统资源。Java提供了一些库来实现这一功能,其中之一就是jcifs库,它是一个开源的Java SMB(Server Message ...
标题“Java访问共享文件”指的是使用Java编程语言来操作网络上的共享文件系统,这通常涉及到Windows的SMB(Server Message Block)协议或者更现代的CIFS(Common Internet File System)协议。这篇博客文章可能详细...
java读写ftp文件以及设置ftp共享服务器
在Java编程中,有时我们需要执行一些系统级别的操作,如创建目录、复制文件等,这些操作在Windows系统中可以通过命令行接口(CMD)来完成。Java提供了Runtime类和ProcessBuilder类来实现这样的功能,允许我们调用...
用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...
标题“使用j-Interop查询共享目录”涉及到的是Java编程中如何通过j-Interop库来访问Windows Management Instrumentation (WMI)服务,以便查询和管理Windows系统中的共享目录。这是一个跨平台编程的示例,其中Java...
完成一个多线程的文件共享服务器,可以控制允许连接数,以及可以设置多个共享目录。
它支持SMB2和SMB3协议,允许Java应用程序连接到SMB共享,执行读写文件、创建目录、删除文件等操作。Smbj库提供了异步和同步API,可以方便地集成到多线程环境中。 3. **mbassador-1.3.2.jar**:这是一个事件驱动框架...
1. 文件上传(File Upload) 2. 文件下载(File Download) 3. 文件读取(File Reading) 4、优点: 封装性:工具类封装了NFS相关的复杂连接、认证和I/O操作细节,使得业务层代码无需关心底层通信协议,只需通过...