java访问windows远端共享文件的方法
没密码的,直接用url访问就可以了,跟本地文件相同。
有密码的,用smb。
远端需要开启smb。
win10启动smb的方法:
https://jingyan.baidu.com/article/47a29f2477fb56c014239996.html
注意,配完必须要重启windows。
smb需要在服务器端启动,也就是那台windows机器,不启动会报错  Software caused connection abort: recv failed
package file;
import jcifs.smb.*;
import java.io.*;
public class ShareFile {
    /**
     * 一个普通的读取远端共享文件的方法,不需要输入密码
     * @param sourceFilePath
     * @param encode
     * @throws IOException
     */
    public static void readFile(String sourceFilePath, String encode) throws IOException {
        File file = new File(sourceFilePath);
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), encode));
        StringBuilder strBuilder = new StringBuilder();
        String sLine = null;
        while ((sLine = br.readLine()) != null) {
            strBuilder.append(sLine);
            strBuilder.append("\r\n");
        }
        br.close();
        System.out.println(strBuilder.toString());
    }
    /**
     * 一个普通的读取远端共享文件并保存到本地的方法,不需要输入密码
     * @param srcFileUrl
     * @param dstFilePath
     * @param dstFileName
     * @throws IOException
     */
    public static void readAddSaveFile(String srcFileUrl, String dstFilePath,String dstFileName) throws IOException {
        File dstPath = new File(dstFilePath);
        if (!dstPath.exists()) {
            dstPath.mkdirs();
        }
        OutputStream outputStream = new FileOutputStream(dstPath.getPath() + File.separator + dstFileName);
        // 开始读取
        int len;
        byte[] bs = new byte[1024];        // 1K的数据缓冲
        File srcFile = new File(srcFileUrl);
        InputStream inputStream = new FileInputStream(srcFile);
        while ((len = inputStream.read(bs)) != -1) {
            outputStream.write(bs, 0, len);
        }
        inputStream.close();
        outputStream.flush();
        outputStream.close();
    }
    /**
     * 一个往远端smb文件写数据的方法。
     * @throws IOException
     */
    public static void getFileBySmb() throws IOException {
        String user = "Felicia_shi";
        String pass = "123456";
        String sharedFolder = "Share";
        String path = "smb://1.1.1.109/" + sharedFolder + "/test.txt";
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", user, pass);
        SmbFile smbFile = new SmbFile(path, auth);
        System.out.println(smbFile.getDfsPath());
        ;
        SmbFileOutputStream smbfos = new SmbFileOutputStream(smbFile);
        smbfos.write("testing.and writing to a file".getBytes());
        System.out.println("completed nice !");
    }
    /**
     * 远端文件路径。账号密码可以用这个url里面配置的,也可以用上面的NtlmPasswordAuthentication方式
     */
    private static String smbUrl = "smb://Felicia_shi:123456@1.1.1.109/Share";
    /**
     * 在远端smb路径下创建路径
      * @param dir
     * @throws Exception
     */
    public static void createDir(String dir) throws Exception{
        SmbFile fp = new SmbFile(smbUrl +"/"+dir);
        System.out.println("fieldir+++++++++++++++++++++="+ smbUrl +"/"+dir);
        //File fp = new File("Z://"+dir);
        // 目录已存在创建文件夹
        if (fp.exists() && fp.isDirectory()) {
        } else{
            // 目录不存在的情况下,会抛出异常
            fp.mkdir();
        }
    }
    /**
     * 拷贝smb下一个文件到本地。dstFileName为本地带文件名的路径,smbUrl为远端路径,文件名一样。
     * 这么写比较死,可以把文件名和路径分开放。
     * @param dstFileName
     */
    public static void copyDir(String dstFileName) {
        InputStream in = null;
        OutputStream out = null;
        try{
            File fp = new File(dstFileName);
            SmbFile remoteFile = new SmbFile(smbUrl +"//"+fp.getName());
            System.out.println("remoteFile+++++++++++++++++++++="+remoteFile);
            in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
            out = new BufferedOutputStream(new FileOutputStream(fp));
//            in = new BufferedInputStream(new FileInputStream(fp));
//            out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
            byte[] buffer = new byte[1024];
            int len;
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }
            // 刷新此缓冲的输出流
            out.flush();
        }catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 获取本段路径下的所有文件名
     * @param path
     * @return
     */
    public static String[] getFileNames(String path) {
        File dirFile = new File(path);
        if (dirFile.isDirectory()) {
            File[] files = dirFile.listFiles();
            String[] fileNames = new String[files.length];
            for (int i = 0; i < files.length; i++) {
                fileNames[i] = files[i].getAbsolutePath();
            }
            return fileNames;
        } else {
            return null;
        }
    }
    public static void main(String[] args) {
//        //读取单个文件
//        try {
//            ShareFile.readFile("\\\\1.1.1.110\\sfx\\gx\\11.txt","utf-8");
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//          //读取某个目录下所有文件
//
//        String[] fileNames = getFileNames("\\\\1.1.1.110\\sfx\\gx");
//        String encode = "utf-8";
//        for (String fileName : fileNames) {
//            try {
//                readFile(fileName, encode);
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        try {
//            readAddSaveFile("\\\\1.1.1.110\\sfx\\gx\\a.pdf","\\\\1.1.1.110\\sfx\\gx1","a.pdf");
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        try {
//            getFileBySmb();
//            createDir("111");
//        } catch (IOException e) {
//            e.printStackTrace();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
        copyDir("E:\\\\sfx\\gx1\\a.pdf");
    }
}
java访问windows远端共享文件的方法的更多相关文章
- 双系统Ubuntu无法访问windows磁盘分区解决方法
		
为了更好的体验各种操作系统,在电脑中安装双系统是很好的选择,但在使用中难免会遇到这样或那样的问题. 最近总是遇到Ubuntu系统下无法访问windows磁盘分区问题,看了系统日志发现是挂载磁盘出问题了 ...
 - Linux 中 java 访问 windows共享目录
		
有两个方案: 1.将windows共享目录,挂载到linux系统下,通过使用本地目录访问windows共享目录 2.通过samba的java实现包,不过需要开个windows共享目录的账户 http ...
 - Linux访问Windows共享目录的方法——smbclient
		
之前写过Ubuntu访问Windows共享目录,里面主要介绍如何在GUI上访问windows共享目录. 本文侧重于整理通过命令行访问的方法. 先确保smbclient.ubuntu下可以直接运行下面命 ...
 - Mac下访问windows的共享文件夹
		
Finder->前往->smb://<user>@<ip>
 - linux访问windows共享文件夹的方法
		
博客转自:http://www.01happy.com/linux-access-windows-shares-folders/ 有时需要在linux下需要访问windows的共享文件夹,可以使用mo ...
 - linux访问windows共享文件夹的两种方法
		
有时需要在linux下需要访问windows的共享文件夹,可以使用mount挂载或者使用samba连接. 1.mount挂载 首先创建被挂载的目录: $ mkdir windows 将共享文件夹挂载到 ...
 - (转)linux访问windows共享文件夹的两种方法
		
有时需要在linux下访问window的共享文件,可以使用mount挂载或使用samba连接. 1,mount挂载 $ mkdir windows 将共享文件夹挂载到windows文件夹: mount ...
 - Java读写Windows共享文件夹 .
		
版权声明:本文为博主原创文章,未经博主允许不得转载. 项目常常需要有访问共享文件夹的需求,例如共享文件夹存储照片.文件等.那么如何使用Java读写Windows共享文件夹呢? Java可以使用JCIF ...
 - 【转】Mac访问Windows共享文件夹
		
相信大多数的用户用Windows访问Windows的共享文件夹是一件很容易的事,但是如果用Mac来访问Windows共享文件夹就会遇到很多的麻烦了,尤其是设置是比较有区别的吗,接下来的将用图文交大家怎 ...
 
随机推荐
- CentOS7下Django安装
			
Django安装介绍 安装环境: CentOS7 安装Django比较简单,但需要安装其依赖的东西,还是需要一定时间的.我使用的环境是CentOS Linux release 7.3.1611. 内核 ...
 - python: local variable 'xxx' referenced before assignment
			
问题发现 xxx = 23 def PrintFileName(strFileName): if xxx == 23: print strFileName xxx = 24 PrintFileName ...
 - Java给树加子节点个数统计
			
通过后台实现 private List<Photo> getChildren(Photo photo) { List<Photo> children = new ArrayLi ...
 - [转]Install ASP.NET MVC 4 for Visual Studio 2010
			
本文转自:https://docs.microsoft.com/en-us/aspnet/mvc/mvc4
 - php中cookie的操作
			
php设置和获取cookie 创建cookie setcookie('mycookie','value',time()+86400);//参数3 cookie过期时间//函数原型:int setcoo ...
 - Table Code
			
post.PostToTags.Where(t => tagArray.Contains(t.PostTag.Name, comparerWihtoutCases) && !t. ...
 - WPF简单的数据库查询
			
做一个简单WPF连接数据库的 控件类型和名称:DataGrid:dataGrid Button1 :Button1 Button: Button2 ...
 - JVM(一)
			
Java 环境 Java 运行过程 下面几张图,我们可以了解到 Java 这门语言是如何进行运行的. java文件通过编译器编译成class文件,然后在虚拟机中转化为机器语言运行在机器上. 上图展示了 ...
 - SQL语句整理(一) 数据库查询语言DQL
			
前言: 这是我学数据库时整理的学习资料,基本上包括了所以的SQL语句的知识点. 我的教材是人大王珊老师的<数据库系统概论>. 因为是手打的,所以会用一些细节打错了,但都挺明显也不多(考完试 ...
 - TCP基础知识(三)重传、流量控制、拥塞控制
			
TCP详解(3):重传.流量控制.拥塞控制…… 数据传输 在TCP的数据传送状态,很多重要的机制保证了TCP的可靠性和强壮性.它们包括:使用序号,对收到的TCP报文段进行排序以及检测重复的数据:使用校 ...