没密码的,直接用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远端共享文件的方法的更多相关文章

  1. 双系统Ubuntu无法访问windows磁盘分区解决方法

    为了更好的体验各种操作系统,在电脑中安装双系统是很好的选择,但在使用中难免会遇到这样或那样的问题. 最近总是遇到Ubuntu系统下无法访问windows磁盘分区问题,看了系统日志发现是挂载磁盘出问题了 ...

  2. Linux 中 java 访问 windows共享目录

    有两个方案: 1.将windows共享目录,挂载到linux系统下,通过使用本地目录访问windows共享目录 2.通过samba的java实现包,不过需要开个windows共享目录的账户  http ...

  3. Linux访问Windows共享目录的方法——smbclient

    之前写过Ubuntu访问Windows共享目录,里面主要介绍如何在GUI上访问windows共享目录. 本文侧重于整理通过命令行访问的方法. 先确保smbclient.ubuntu下可以直接运行下面命 ...

  4. Mac下访问windows的共享文件夹

    Finder->前往->smb://<user>@<ip>

  5. linux访问windows共享文件夹的方法

    博客转自:http://www.01happy.com/linux-access-windows-shares-folders/ 有时需要在linux下需要访问windows的共享文件夹,可以使用mo ...

  6. linux访问windows共享文件夹的两种方法

    有时需要在linux下需要访问windows的共享文件夹,可以使用mount挂载或者使用samba连接. 1.mount挂载 首先创建被挂载的目录: $ mkdir windows 将共享文件夹挂载到 ...

  7. (转)linux访问windows共享文件夹的两种方法

    有时需要在linux下访问window的共享文件,可以使用mount挂载或使用samba连接. 1,mount挂载 $ mkdir windows 将共享文件夹挂载到windows文件夹: mount ...

  8. Java读写Windows共享文件夹 .

    版权声明:本文为博主原创文章,未经博主允许不得转载. 项目常常需要有访问共享文件夹的需求,例如共享文件夹存储照片.文件等.那么如何使用Java读写Windows共享文件夹呢? Java可以使用JCIF ...

  9. 【转】Mac访问Windows共享文件夹

    相信大多数的用户用Windows访问Windows的共享文件夹是一件很容易的事,但是如果用Mac来访问Windows共享文件夹就会遇到很多的麻烦了,尤其是设置是比较有区别的吗,接下来的将用图文交大家怎 ...

随机推荐

  1. 说说移动端web开发中的点击穿透问题

    最近一直在忙于一个无线端的项目,由于之前主要工作都是在桌面端,移动端接触的比较少,所以中间遇到了很多的坑,做一个简单的记录. 问题背景 需求中有这样的一个功能,点击取件信息的时候会弹出一个地址列表的浮 ...

  2. unity制作人物残影-绘制的方法

    这里是利用skinnedMeshRenderer原理做的 所以脚本需要挂在带这个组件的模型上 模型shader 必须要有个_Color参数属性,并且这个值可以调节颜色,会改变人物整体的透明度 [代码下 ...

  3. 2.1 js 基础--select深入

    select     获取select下的所有option     用op=select.options         option属性:op[1].value,op[1].text;     // ...

  4. Go语言备忘录(2):反射的原理与使用详解

    本文内容是本人对Go语言的反射原理与使用的备忘录,记录了关键的相关知识点,以供翻查. 文中如有错误的地方请大家指出,以免误导!转摘本文也请注明出处:Go语言备忘录(2):反射的原理与使用详解,多谢! ...

  5. python-入门教程(操作mysql数据库)

    pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x,而MySQLdb不支持3.x版本. 本文测试python版本:3.6. ...

  6. dns dig 查看支持ipv6网站

    1.处理zone文件 A.先格式化区文件数据,去掉不需要的数据,生成新的文件 com.zone.sample cat com.zone |grep -P IN'\t'NS|awk -F '\t' '{ ...

  7. 在WPF中自定义控件

    一, 不一定需要自定义控件在使用WPF以前,动辄使用自定义控件几乎成了惯性思维,比如需要一个带图片的按钮,但在WPF中此类任务却不需要如此大费周章,因为控件可以嵌套使用以及可以为控件外观打造一套新的样 ...

  8. JVM(五) class类文件的结构

    概述 class类文件的结构可见下面这样图(出处见参考资料),可以参照下面的例子,对应十六进制码,找出找出相应的信息. 其中u2 , u4 表示的意思是占用两个字节和占用四个字节,下面我们将会各项说明 ...

  9. Shiro登录校验

    shiro是一种权限认证框架,实现一个简单的登录鉴权: 1.控制器层: @Controller @RequestMapping("/blogger") public class B ...

  10. GIT学习笔记——第一章

    git之vim编辑器退出命令 # 学习笔记 张文军微博主页  张文军码云主页   张文军新浪云主页  张文军博客主页 ## 刚学习git,好多东西没接触过,进入vim后不知道如何出来了,网上找了很多都 ...