浏览 10054 次
锁定老帖子 主题:java如何远程访问一个共享目录
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-24
最后修改:2008-11-24
由于工作需要读取局域网中一台机器的 共享目录中的文件,需要jcifs-1.1.11.jar的支持,使用SMB协议协议,以下是实现了远程读取并复制到本地,然后删除本地文件的功能:
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://10.108.23.200/temp/说明文件.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); 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; } public static boolean removeFile(File file) { return file.delete(); } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-26
直接用URLCONNECTION
|
|
返回顶楼 | |
发表时间:2008-11-26
最后修改:2008-11-26
wangxuliangboy 写道 直接用URLCONNECTION
你这么做访问不到吧, 如果他的server是linux, 应该需要特定的支持WINDOWS共享的包. 不过呢, 我不大建议使用这么的共享, 最好开个FTP服务, 来完成读/删除文件. SBM的这东西稍微不大那么靠普点. 毕竟这是个CRACK的协议. |
|
返回顶楼 | |
发表时间:2008-12-16
beckdim 写道
由于工作需要读取局域网中一台机器的 共享目录中的文件,需要jcifs-1.1.11.jar的支持,使用SMB协议协议,以下是实现了远程读取并复制到本地,然后删除本地文件的功能:
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://10.108.23.200/temp/说明文件.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); 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; } public static boolean removeFile(File file) { return file.delete(); } }
|
|
返回顶楼 | |
发表时间:2008-12-16
sdh5724 写道 wangxuliangboy 写道 直接用URLCONNECTION
你这么做访问不到吧, 如果他的server是linux, 应该需要特定的支持WINDOWS共享的包. 不过呢, 我不大建议使用这么的共享, 最好开个FTP服务, 来完成读/删除文件. SBM的这东西稍微不大那么靠普点. 毕竟这是个CRACK的协议. ftp到本地 处理完删除 稳定可靠 |
|
返回顶楼 | |
发表时间:2009-02-19
Access is denied.
请问我报这个错是什么原因呢 我机子是XP的,远程机子是2003的 |
|
返回顶楼 | |
发表时间:2009-02-19
最后修改:2009-02-19
mount到本地不行?windows上做个磁盘映射,映射成本地的一块磁盘,例如K盘。
|
|
返回顶楼 | |
发表时间:2009-05-27
请问楼主,如何访问整个共享目录,查看指定目录下的子目录和文件?
|
|
返回顶楼 | |