`
beckdim
  • 浏览: 180970 次
  • 性别: 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访问windows共享目录并下载文件

    在Java编程环境中,有时我们需要与Windows操作系统进行交互,例如访问共享目录并下载其中的文件。这个过程涉及到几个关键的技术点,包括系统调用、网络通信和文件操作。在这个场景下,我们将通过`SmbUtils.java`和`...

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

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

    jcifs java远程访问

    Java Community Interface for File Systems (JCIFS) 是一个开源的Java库,它允许Java应用程序通过SMB(Server Message Block)协议来实现对网络上共享资源的访问。标题中的“jcifs java远程访问”指的是使用JCIFS库...

    Java远程共享目录的操作代码

    Java远程共享目录的操作代码 Java远程共享目录的操作代码是指使用Java语言来操作远程共享目录的实现代码。这种操作代码非常重要,因为它涉及到文件下载和上传到远程共享目录,特别是在涉及到支付文件时,需要确保...

    java 操作windows 共享目录方法介绍

    ### Java操作Windows共享目录的方法介绍 #### 一、SMB协议概述 SMB(Server Message Block)协议,也称为CIFS(Common Internet File System),是一种客户端/服务器类型的网络协议,主要用于提供共享访问文件、...

    java访问共享文件

    总之,“Java访问共享文件”这个主题涵盖了网络编程、文件I/O、安全策略等多个方面,理解并熟练运用jcifs库或其他SMB库是Java开发者在处理跨网络文件操作时的必备技能。通过深入学习和实践,可以有效地管理和维护...

    java操作共享文件

    Java提供了一些库来实现这一功能,其中之一就是jcifs库,它是一个开源的Java SMB(Server Message Block)客户端,使得Java程序能够方便地操作Windows网络共享文件。在本文中,我们将深入探讨如何使用jcifs库中的...

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

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

    使用smbj.jar访问共享文件夹,解决SMB2/SMB3共享文件夹访问的问题

    "smbj.jar"是一个专门用于处理SMB(Server Message Block)协议的Java库,它允许Java应用程序无缝地访问Windows网络共享资源。本文将深入探讨如何使用smbj.jar以及其解决SMB2/SMB3协议问题的关键点。 首先,让我们...

    Java使用NFS实现上传、下载、读取文件工具类

    封装性:工具类封装了NFS相关的复杂连接、认证和I/O操作细节,使得业务层代码无需关心底层通信协议,只需通过简单API即可操作远程文件。 可配置性:允许灵活配置NFS服务器地址、挂载点以及其他相关参数,使工具类...

    Java读写Windows共享文件夹的方法实例

    JCIFS(Java Community Internet File System)是一个完全用Java编写的开源框架,它实现了SMB(Server Message Block)协议,使得Java应用程序能够如同访问本地文件系统一样,方便地读写Windows或Linux上的共享...

    java共享文件(windows).rar

    然而,Java标准库并未直接支持SMB协议,需要依赖第三方库,如jcifs(Java CIFS Client)或jcifs-ng,它们提供了SMB接口以访问共享文件。 3. **jcifs库的使用**:jcifs库(或jcifs-ng)允许Java程序以SMB协议连接到...

    rdp4j:Java的远程目录轮询器

    **rdp4j:Java远程目录轮询器详解** rdp4j是一个专门为Java开发者设计的工具,用于实现远程目录的轮询功能。这个库使得Java应用能够定期检查远程服务器上的目录变化,例如监视新文件的添加、删除或修改,这对于文件...

    Java对Samba进行上传与下载文件-jcifs

    2. **建立连接**:然后,你可以通过SmbFile构造函数创建一个指向Samba服务器共享目录的SmbFile对象。URL格式通常为`smb://[username[:password]@]server/share[路径]`。 ```java SmbFile smbFile = new SmbFile(...

    使用j-Interop查询共享目录

    标题“使用j-Interop查询共享目录”涉及到的是Java编程中如何通过j-Interop库来访问Windows Management Instrumentation (WMI)服务,以便查询和管理Windows系统中的共享目录。这是一个跨平台编程的示例,其中Java...

    java源码包2

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

    java源码包3

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

    java利用SMB读取远程文件的方法

    Java 语言可以通过 SMB(Server Message Block)协议来读取远程文件,SMB 是一个标准的网络协议,允许不同的操作系统之间进行文件共享和打印机共享。在 Java 中,我们可以使用 jcifs 库来实现 SMB 读取远程文件的...

    radius客户端java版本

    Radius客户端在IT行业中主要...总结来说,这个Java版本的Radius客户端是一个强大的工具,它不仅提供了认证服务,还具备监控Radius服务器的功能。对于需要在Java应用中集成Radius功能的开发者来说,这是一个宝贵的资源。

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

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

Global site tag (gtag.js) - Google Analytics