java 将远程共享的文件复制到本地

来源:互联网 发布:数据监控系统 编辑:程序博客网 时间:2024/05/14 16:39

java 远程共享的文件复制到本地

public class ReadSmb {public static void main(String[] args) {String smbMachine = "smb://用户名:密码@远程共享的ip地址/123/20120314141221_00003.tif";String localPath = "E:/test";File file = readFromSmb(smbMachine,localPath);}public static File readFromSmb(String smbMachine,String localPath){File localfile = null;InputStream is = null;OutputStream os = null;try{//远程读取文件SmbFile rmiFile = new SmbFile(smbMachine);String filename = rmiFile.getName(); //获取文件名is = new BufferedInputStream(new SmbFileInputStream(rmiFile)); //对文件进行读取//将远程文件写到本地localfile = new File(localPath + File.separator + filename);  //将远程拷贝的文件,指定到具体的本地的具体路径System.out.println("lcoalfile:" + localfile);os = new BufferedOutputStream(new FileOutputStream(localfile)); int length = rmiFile.getContentLength();  //获取文件的内容大小System.out.println("length:" + length);byte[] buffer = new byte[length];is.read(buffer); os.write(buffer);  //开始写}catch(Exception e){e.printStackTrace();}finally{try {is.close();os.close();} catch (IOException e) {e.printStackTrace();}}return localfile;}}

注意:String smbMachine = "smb://用户名:密码@共享文件的IP/123/20120314141221_00003.tif";有的机器这样写是没有问题的,

            但是如果是xp的机器,这样写会抛如下异常

jcifs.smb.SmbAuthException: Logon failure: unknown user name or bad password.at jcifs.smb.SmbSession.sessionSetup(SmbSession.java:387)at jcifs.smb.SmbSession.send(SmbSession.java:235)at jcifs.smb.SmbTree.treeConnect(SmbTree.java:161)at jcifs.smb.SmbFile.doConnect(SmbFile.java:858)at jcifs.smb.SmbFile.connect(SmbFile.java:901)at jcifs.smb.SmbFile.connect0(SmbFile.java:827)at jcifs.smb.SmbFile.open0(SmbFile.java:917)at jcifs.smb.SmbFile.open(SmbFile.java:951)at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:73)at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:65)at com.xdl.ReadSmb.readFromSmb(ReadSmb.java:36)at com.xdl.ReadSmb.main(ReadSmb.java:24)Exception in thread "main" java.lang.NullPointerExceptionat com.xdl.ReadSmb.readFromSmb(ReadSmb.java:52)at com.xdl.ReadSmb.main(ReadSmb.java:24)
把这串字符改成 "smb://共享文件的IP/123/20120314141221_00003.tif"(即去掉用户名和密码)结果就没有抛异常了