java 读取远程共享文件

来源:互联网 发布:linux命令ls -lre意思 编辑:程序博客网 时间:2024/06/05 05:33

jcifs 项目地址 http://jcifs.samba.org/ 

例子一

import jcifs.smb.SmbFile;import jcifs.smb.SmbFileInputStream;public class ReadShareFile {public static void main(String[] args) {try {SmbFile smbFile = new SmbFile("smb://test:test@192.168.1.1/out/test.txt");int length = smbFile.getContentLength();// 得到文件的大小byte buffer[] = new byte[length];SmbFileInputStream in = new SmbFileInputStream(smbFile);// 建立smb文件输入流while ((in.read(buffer)) != -1) {System.out.write(buffer);System.out.println(buffer.length);}in.close();} catch (Exception e) {e.printStackTrace();}}}

例子二


import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Date;import jcifs.smb.SmbFile;import jcifs.smb.SmbFileInputStream;  public class TestReadSmb {       public static void main(String[] args){               String smbMachine="smb://test:test@10.108.23.200/temp/test.txt";                String localPath="D:\\temp";               File file=readFromSmb(smbMachine,localPath);               removeFile(file);       }         /** ***       * 从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);               String filename=rmifile.getName();               bis=new BufferedInputStream(new SmbFileInputStream(rmifile));               localfile=new File(localpath+File.separator+filename);              System.out.println("localfile=="+localfile);            bos=new BufferedOutputStream(new FileOutputStream(localfile));               int length=rmifile.getContentLength();              System.out.println("length=="+length);            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){                System.out.println(e.getMessage());                          }finally{               try {                   bos.close();                   bis.close();               } catch (IOException e) {                   e.printStackTrace();               }                       }           return localfile;       }       public static boolean removeFile(File file) {           return file.delete();       }   }  

注意:String smbMachine = "smb://用户名:密码@共享文件的IP/123/20120314141221_00003.tif";有的机器这样写是没有问题的,但是如果是xp的机器,这样写会抛如下异常.把这串字符改成 "smb://共享文件的IP/123/20120314141221_00003.tif"(即去掉用户名和密码)结果就没有抛异常了


0 0
原创粉丝点击