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.NullPointerException
at com.xdl.ReadSmb.readFromSmb(ReadSmb.java:52)
at com.xdl.ReadSmb.main(ReadSmb.java:24)
把这串字符改成 "smb://共享文件的IP/123/20120314141221_00003.tif"(即去掉用户名和密码)结果就没有抛异常了