同一个局域网内,使用 java 从服务器共享文件夹中复制文件到本地。

1 引用jar 包

<dependency>
    <groupId>org.samba.jcifs</groupId>
    <artifactId>jcifs</artifactId>
    <version>1.3.14-kohsuke-1</version>
</dependency>

2 从本地上传文件到服务器共享文件夹

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;

import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileOutputStream;

/**
 *
 * <b>类名称:</b>CopyFileToLan<br/>
 * <b>类描述:</b> 本地文件写入局域网共享文件夹   <br/>
 * <b>版本:</b>V1.0<br/>
 */
public class CopyFileToLan {

    public static void main(String[] args){

        InputStream in = null;
        OutputStream out = null;
        try {
            //测试文件
            File localFile = new File("D:\\文档\\test.txt");

            String host = "192.168.1.151";//远程服务器的地址
            String username = "admin";//用户名
            String password = "admin";//密码
            String path = "/share/";//远程服务器共享文件夹名称

            String remoteUrl = "smb://" + username + ":" + password + "@" + host + path + (path.endsWith("/") ? "" : "/");
            SmbFile remoteFile = new SmbFile(remoteUrl + "/" + localFile.getName());
            remoteFile.connect();

            in = new BufferedInputStream(new FileInputStream(localFile));
            out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));

            byte[] buffer = new byte[4096];
            int len = 0;
            while ((len = in.read(buffer, 0, buffer.length)) != -1) {
                out.write(buffer, 0, len);
            }
            out.flush();
        }
        catch (Exception e) {
            String msg = "发生错误:" + e.getLocalizedMessage();
            System.out.println(msg);
        }
        finally {
            try {
                if(out != null) {
                    out.close();
                }
                if(in != null) {
                    in.close();
                }
            }
            catch (Exception e) {}
        }
    }
}

3 从服务器共享文件夹下载文件到本地

import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import java.io.*;

/**
 * <b>类名称:</b>CopyLanFileToLocal<br/>
 * <b>类描述:</b> 读取局域网共享文件夹文件,到本地文件夹   <br/>
 */
public class CopyLanFileToLocal {

    public static void main(String[] args) {
        InputStream in = null;
        OutputStream out = null;
        try {
            //目标文件名
            String fileName = "1.jpg";
            //本地文件
            String localPath = "d:/";

            String host = "192.168.1.151";//远程服务器的地址
            String username = "admin";//用户名
            String password = "admin";//密码
            String path = "/share/";//远程服务器共享文件夹名称

            String remoteUrl = "smb://" + username + ":" + password + "@" + host + path + (path.endsWith("/") ? "" : "/");

            //创建远程文件对象
            SmbFile remoteFile = new SmbFile(remoteUrl + "/" + fileName);
            remoteFile.connect();

            //创建文件流
            in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
            out = new BufferedOutputStream(new FileOutputStream(new File(localPath + fileName)));
            //读取文件内容
            byte[] buffer = new byte[4096];
            int len = 0;
            while ((len = in.read(buffer, 0, buffer.length)) != -1) {
                out.write(buffer, 0, len);
            }

            out.flush();
        } catch (Exception e) {
            String msg = "下载远程文件出错:" + e.getLocalizedMessage();
            System.out.println(msg);
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (Exception e) {
            }
        }
    }
}

SmbFile 和 FIle 对文件的操作基本一致, 在文件复制的时候,想过用 commons-io 的FileUtils.copyFile(final File srcFile, final File destFile);和 java 1.7 的 Files.copy(Path source, Path target, CopyOption... options);但是由于SmbFile 和 File 不属于一个类型,导致失败,最后只能选择使用流的方式进行操作。

原文地址:https://www.cnblogs.com/zwb1234/p/9257584.html

时间: 2024-11-23 14:35:51

同一个局域网内,使用 java 从服务器共享文件夹中复制文件到本地。的相关文章

C#下载局域网共享文件夹中的文件

在公司的局域网内部,有个主机,共享了几个文件夹给下面的客户机使用. 想要利用这个文件夹上传最新的winform程序版本,每次运行exe的时候检测局域网的软件版本达到更新exe的目的. 这里有个例子,是下载局域网共享文件夹里面txt文件的一个案例:   问题: 现单击Button1就能实现访问固定IP为:10.19.96.215上的共享文件夹里的文件.共享文件夹在该机器中的路径为C:\gongxiang 里面有abc.txt文件.那么在private void button1_Click(obje

局域网内计算机访问FTP服务器时,提示“无法访问服务器名称或地址

局域网内计算机访问FTP服务器时,提示“无法访问服务器名称或地址”,一般由三个原因造成:一.防火墙未关闭解决方法如下:1.单击屏幕左下角的”开始“菜单2.在弹出菜单中单击”控制面板“3.点击”系统和安全“4.点击”Winsows 防火墙“5.单击左侧的”打开或关闭Windows防火墙“6.在”家庭或工作网络位置设置“和”公用网络位置设置“两项里选择关闭防火墙,单击”确定“即可.二.设置有误,FTP被动模式没有禁止.解决方法如下:1.打开浏览器,点击”工具“2.在下拉菜单中点击”Internet选

Java读写Windows共享文件夹 .

版权声明:本文为博主原创文章,未经博主允许不得转载. 项目常常需要有访问共享文件夹的需求,例如共享文件夹存储照片.文件等.那么如何使用Java读写Windows共享文件夹呢? Java可以使用JCIFS框架对Windows共享文件夹进行读写,就这个框架可以让我们像访问本地文件夹一下访问远程文件夹. JCIFS的网址: http://jcifs.samba.org/ JCIFS是使用纯Java开发的一个开源框架,通过smb协议访问远程文件夹.该框架同时支持Windows共享文件夹和Linux共享文

在共享文件夹中解压到linux其他目录中,千万注意软连接的问题

这几天一直在练习驱动,搭建一个简单的交叉编译环境,交叉编译工具链和开发板的源码都导进去linux的目录中,并且解压,但是执行一个简单的交叉编译命令总会出现一个奇怪的错误提示: as:unrecongnized option 'mcpu=XXX'; 百思不得其解,后来经过一个实验室的师兄的提示,终于明白了.这里有一个背景需要交代一下: 我是在windows下面的unbuntu虚拟机中进行的驱动开发练习. 首先,我建立了一个共享文件夹,将交叉编译链的压缩文件拷贝进去,这里我的压缩文件的名字为XXX.

java io流(字节流)复制文件

java io流(字节流) 复制文件 //复制文件 //使用字节流 //复制文本文件用字符流,复制其它格式文件用字节流 import java.io.*; public class Index{ public static void main(String[] args) throws Exception{ //字符流方式 //FileReader fz = new FileReader("E:/1.txt"); //FileWriter zt = new FileWriter(&qu

Java学习-040-级联删除目录中的文件、目录

之前在写应用模块,进行单元测试编码的时候,居然脑洞大开居然创建了一个 N 层的目录,到后来删除测试结果目录的时候,才发现删除不了了,提示目录过长无法删除.网上找了一些方法,也找了一些粉碎机,都没能达到想要的结果,我就简写了一个小应用,用于删除自己脑洞大开创建的级联目录.此小应用没有代码注释,也没有进行容错处理,请大家知悉!哈哈哈哈哈.....若发现有错误,也请告知,我会去修改订正,非常感谢! 闲话少述,直接上码了! 1 /** 2 * Aaron.ffp Inc. 3 * Copyright (

基于WIFI模块(ESP8266)与非同一个局域网内服务器建立连接(转)

原文地址:https://blog.csdn.net/ludaoyi88/article/details/62236644 案例简述: 以WIFI模块(ESP8266)为开发对象,处在局域内网中的WIFI模块,连接到另外一个局域内网的TCP服务器,形成WIFI模块和服务器之间通信.本文先以电脑控制WIFI模块的连接,熟悉AT指令的使用,再通过编程手段,由单片机去控制WIFI模块,深入学习. 一.电脑端调试,控制WIFI模块的连接 说明:将WIFI模块通过串口与电脑连接,电脑通过串口调试软件给模块

[Asp.net]通过uploadify将文件上传到B服务器的共享文件夹中

写在前面 客户有这样的一个需求,针对项目中文档共享的模块,客户提出如果用户上传特别的大,或者时间久了硬盘空间就会吃满,能不能将这些文件上传到其他的服务器?然后就稍微研究了下这方面的东西,上传到网络中的某个共享的文件夹下确实能做到的. 解决方案 环境描述: 若A为web服务器,B为要存放文档的文件服务器. 如果通过A中的某个页面将文件上传到服务器B,则需要如下三个步骤. 1.在服务器B上面建立共享文件夹,步骤如下: 编辑贡献文件夹的权限,添加一个用户,并给它开放读写的权限. 2.共享文件夹建立之后

共享文件夹下其他文件可以访问但php文件访问不了的原因

刚开始的问题是在virtualbox里的共享文件夹下的项目运行不了,原因是宝塔下nginx的用户和用户组默认是www 和 www 需要改成www vboxsf(因为自动挂载的目录为/media/sf_XXX,这个文件夹下的默认用户和用户组就是root/vboxsf,所以在项目在wwwroot下是没有问题的.) 1.nginx使用指定的用户.用户组运行 vi /usr/local/nginx/conf/nginx.conf 开头有一个 #user nobody; 把井号删掉,nobody改为 用户