java下载上传远程文件

利用的是SMB协议从远程服务器下载上传文件

可以在本地做一个共享文件夹放点东西来测试下

这是用到的jar包[jcifs-1.2.3.jar],不能设置0积分有点可惜。(https://download.csdn.net/download/qq_39019865/10276986)

package com.yss.test.FileReadWriter;  

import java.io.BufferedInputStream;  
import java.io.BufferedOutputStream;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.net.MalformedURLException;  

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

public class RemoteAccessData {  

    /** 
     * @param args 
     * @throws IOException  
     */  
    public static void main(String[] args) throws IOException {  
        smbGet1("smb://192.168.75.204/test/新建 文本文档.txt");  
        smbGet("smb://192.168.75.204/test/新建 文本文档.txt","e:/");  
    }  

    /** 
     * 方法一: 
     *  
     * @param remoteUrl 
     *            远程路径 smb://192.168.75.204/test/新建 文本文档.txt 
     * @throws IOException 
     */  
    public static void smbGet1(String remoteUrl) throws IOException {  
        SmbFile smbFile = new SmbFile(remoteUrl);  
        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();  
    }  

    // 从共享目录下载文件  
    /** 
     * 方法二: 
     *    路径格式:smb://192.168.75.204/test/新建 文本文档.txt 
     *              smb://username:password@192.168.0.77/test 
     * @param remoteUrl 
     *            远程路径 
     * @param localDir 
     *            要写入的本地路径 
     */  
    public static void smbGet(String remoteUrl, String localDir) {  
        InputStream in = null;  
        OutputStream out = null;  
        try {  
            SmbFile remoteFile = new SmbFile(remoteUrl);  
            if (remoteFile == null) {  
                System.out.println("共享文件不存在");  
                return;  
            }  
            String fileName = remoteFile.getName();  
            File localFile = new File(localDir + File.separator + fileName);  
            in = new BufferedInputStream(new SmbFileInputStream(remoteFile));  
            out = new BufferedOutputStream(new FileOutputStream(localFile));  
            byte[] buffer = new byte[1024];  
            while (in.read(buffer) != -1) {  
                out.write(buffer);  
                buffer = new byte[1024];  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                out.close();  
                in.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  

    // 向共享目录上传文件  
    public static void smbPut(String remoteUrl, String localFilePath) {  
        InputStream in = null;  
        OutputStream out = null;  
        try {  
            File localFile = new File(localFilePath);  

            String fileName = localFile.getName();  
            SmbFile remoteFile = new SmbFile(remoteUrl + "/" + fileName);  
            in = new BufferedInputStream(new FileInputStream(localFile));  
            out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));  
            byte[] buffer = new byte[1024];  
            while (in.read(buffer) != -1) {  
                out.write(buffer);  
                buffer = new byte[1024];  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                out.close();  
                in.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  

    // 远程url smb://192.168.0.77/test  
    // 如果需要用户名密码就这样:  
    // smb://username:password@192.168.0.77/test  

}

如果是下载上传远程文件夹的话,需要把文件夹遍历一下,路径也需要修改,smbGet的最后要加“/”

// 从共享目录下载文件夹  
    /** 
     * 方法二: 
     *  smbGet("smb://tom:123@192.168.0.87/datatrans/price/","f:/");  
     * @param remoteUrl 
     *            远程路径 
     * @param localDir 
     *            要写入的本地路径 
     */  
    public static void smbGet(String remoteUrl, String localDir) {  
        InputStream in = null;  
        OutputStream out = null;  
        try {  
            SmbFile remoteFile = new SmbFile(remoteUrl);  
            if (remoteFile == null) {  
                System.out.println("共享文件不存在");  
                return;  
            }  
            SmbFile[] files = remoteFile.listFiles();
            for (SmbFile smbFile : files) {
                String fileName = smbFile.getName();
                File localFile = new File(localDir + File.separator + fileName);  
                in = new BufferedInputStream(new SmbFileInputStream(remoteFile+fileName));  
                out = new BufferedOutputStream(new FileOutputStream(localFile));  
                byte[] buffer = new byte[1024];  
                while (in.read(buffer) != -1) {  
                    out.write(buffer);  
                    buffer = new byte[1024];  
                }  
            }
            System.out.println("完成");
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                out.close();  
                in.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  

    // 向共享目录上传文件  
    public static void smbPut(String remoteUrl, String localFilePath) {  
        InputStream in = null;  
        OutputStream out = null;  
        try {  
            File localFile = new File(localFilePath);  

            String fileName = localFile.getName();  
            SmbFile remoteFile = new SmbFile(remoteUrl + "/" + fileName);  
            in = new BufferedInputStream(new FileInputStream(localFile));  
            out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));  
            byte[] buffer = new byte[1024];  
            while (in.read(buffer) != -1) {  
                out.write(buffer);  
                buffer = new byte[1024];  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                out.close();  
                in.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值