`
beckdim
  • 浏览: 179159 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java如何远程访问一个共享目录

    博客分类:
  • Java
阅读更多

由于工作需要读取局域网中一台机器的 共享目录中的文件,需要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();
    }
}

 

分享到:
评论
7 楼 ylz4647 2009-05-27  
请问楼主,如何访问整个共享目录,查看指定目录下的子目录和文件?
6 楼 myreligion 2009-02-19  
mount到本地不行?windows上做个磁盘映射,映射成本地的一块磁盘,例如K盘。
5 楼 hackboyo 2009-02-19  
Access is denied.
请问我报这个错是什么原因呢
我机子是XP的,远程机子是2003的
4 楼 hocus 2008-12-16  
sdh5724 写道
wangxuliangboy 写道
直接用URLCONNECTION



你这么做访问不到吧, 如果他的server是linux, 应该需要特定的支持WINDOWS共享的包.  不过呢, 我不大建议使用这么的共享, 最好开个FTP服务, 来完成读/删除文件. SBM的这东西稍微不大那么靠普点. 毕竟这是个CRACK的协议.

ftp到本地
处理完删除
稳定可靠
3 楼 My_Choice 2008-12-16  
<div class='quote_title'>beckdim 写道</div>
<div class='quote_div'>
<p>由于工作需要读取局域网中一台机器的 共享目录中的文件,需要<a href='http://jcifs.samba.org/src/'><span style='color: #075db3;'>jcifs-1.1.11.jar</span></a>的支持,使用<a href='http://www.yuanma.org/data/2006/0614/article_826.htm'><span style='color: #075db3;'>SMB协议</span></a>协议,以下是实现了远程读取并复制到本地,然后删除本地文件的功能:</p>
<p> </p>
<pre name='code' class='java'>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&gt;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();
    }
}
</pre>
<p> </p>
</div>
<p> </p>
2 楼 sdh5724 2008-11-26  
wangxuliangboy 写道
直接用URLCONNECTION



你这么做访问不到吧, 如果他的server是linux, 应该需要特定的支持WINDOWS共享的包.  不过呢, 我不大建议使用这么的共享, 最好开个FTP服务, 来完成读/删除文件. SBM的这东西稍微不大那么靠普点. 毕竟这是个CRACK的协议.
1 楼 wangxuliangboy 2008-11-26  
直接用URLCONNECTION

相关推荐

    在java中实现对access数据库的远程访问

    首先,在 B 服务器中创建 access 数据库,并创建一个测试数据库,例如 testdb.mdb,然后在 E:\mydb 目录下创建一个 ODBC 数据源。 其次,在 B 服务器中配置并启动 RmiJdbc 服务,下载 RmiJdbc.jar 包,并配置系统...

    超详细!java访问windows共享目录并下载文件

    java调用cmd命令实现访问windows共享目录(需不需要密码均可),然后根据指定文件路径下载文件到我们自己配置的本地目录,main函数为测试代码

    java源码包---java 源码 大量 实例

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    JAVA上百实例源码以及开源项目

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    JAVA上百实例源码以及开源项目源代码

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    java源码包4

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    java源码包3

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    java源码包2

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java目录监视器源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java...

    虚拟机LINUX与主机WINDOWS文件共享

    smbclient 是一个类似于 ftp 操作方式的软件,可以远程操作 WINDOWS 资源。可以使用以下命令访问 WINDOWS 资源: #smbclient -L 192.168.1.150 -N 或者: #smbclient -L hit -N 如果不清楚一个 WINDOWS 计算机的...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java目录监视器源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java...

    java 编程入门思考

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...

    java 面试题 总结

    它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是...

    Java初学者入门教学

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...

    java-servlet-api.doc

    Servlet引擎利用Java类载入工具载入一个Servlet,Servlet引擎可以从一个本地的文件系统、一个远程的文件系统以及网络载入Servlet。 Servlet的初始化 Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化...

    java联想(中文)

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...

    JAVA_Thinking in Java

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...

    Thinking in Java简体中文(全)

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...

    Thinking in Java 中文第四版+习题答案

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 总结...

Global site tag (gtag.js) - Google Analytics