jcifs 具体解释读取网络共享文件数据
时隔1年半,没有发过新的帖子了,也没怎么来过CSDN逛逛了,人也懒散了。
今天收到网友的提问,才回来看看。认为应该再写点什么出来。只是。发现自己研究是不是太深入,写不出那么高深的东西。那就写点肤浅的东西吧。
找来找去,想到写jcifs读取网络共享文件数据。先百度了一下。发现到处都是copy,并且不够具体。有些细节的地方没有注意到。所以写在下篇博客。(啊喂。是不是有点啰嗦了。。)
好,那么開始吧,先介绍一下jcifs:
CIFS (Common Internet File System)
通用Internet文件系统
在windows主机之间进行网络文件共享是通过使用微软公司自己的CIFS服务实现的。
CIFS 是一个新提出的协议,它使程序能够訪问远程Internet计算机上的文件并要求此计算机的服务。CIFS 使用客户/server模式。客户程序请求远在server上的server程序为它提供服务。server获得请求并返回响应。
CIFS是公共的或开放的SMB协议版本号,并由Microsoft使用。
SMB协议(见最后的名词解释)如今是局域网上用于server文件訪问和打印的协议。象SMB协议一样,CIFS在高层执行,而不象TCP/IP协议那样执行在底层。CIFS能够看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。
(转载的,人家也是转载的,没标明出处╮(╯▽╰)╭)。
以下还是来擅长的代码吧.
第一步:搞清楚你全部读取的共享文件的文件夹结构及IP地址,假设须要用户权限的话,那么你就要知道username和password是多少。
例1:smb://userName:password@ip/filePath(这样的情况是须要usernamepassword的情况下输入的条件)
例2:smb://ip/filePath(这样的情况是不须要username和password的)
注意:需不须要usernamepassword这是必须要知道的,不然无法读取,能够自己測试一下。(ctrl+r 输入://192.168.0.12 回车。假设须要账户名password的话,会弹出一个对话框的)
第二步:提供本地保存文件的地址文件夹;
例:E://12 (文件夹必须事先创建好,或者在程序中创建)
接下来上代码:
//获取client全部EXP文件
List<String> fileNames = Smb.getFileNamesFromSmb("smb://Administrator:zwt1314521zw@192.168.6.138/share/");
for (String fileName : fileNames) {
File file = Smb.readFromSmb("smb://Administrator:zwt1314521zw@192.168.6.138/share/"+fileName,"E://138");
}
这里就获得到了共享文件夹以下的全部文件了,这样写的目的在于能够再for循环中依据文件名过滤掉一些已经获取到的,我这里把过滤的代码去掉了,也就是一个if推断而已.
以下是Smb类的代码:
package com.genertech.unit; 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.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List; import jcifs.smb.SmbException;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream; public class Smb {
public static List<String> getFileNamesFromSmb(String smbMachine){
SmbFile file;
SmbFile[] files = null;
try {
file = new SmbFile(smbMachine);
files = file.listFiles();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (SmbException e) {
e.printStackTrace();
}
List<String> fileNames = new ArrayList<String>();
for (SmbFile smbFile : files) {
if(smbFile.getName().indexOf(".EXP")!=-1){
fileNames.add(smbFile.getName());
}
}
return fileNames;
}
/**
* 从smbMachine读取文件并存储到localpath指定的路径
*
* @param smbMachine
* 共享机器的文件,如smb://xxx:xxx@10.108.23.112/myDocument/測试文本.txt,xxx:xxx是共享机器的usernamepassword
* @param localpath
* 本地路径
* @return
*/
public static File readFromSmb(String smbMachine,String localpath){
File localfile=null;
InputStream bis=null;
OutputStream bos=null;
List<File> files = new ArrayList<>();
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];
bis.read(buffer);
bos.write(buffer);
try {
bos.close();
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
files.add(localfile);
} catch (Exception e) {
e.printStackTrace();
}
return localfile;
}
public static boolean removeFile(File file) {
return file.delete();
}
}
大概就这些,中间大家能够依据自己的须要加上一些其它的功能,有问题请留言。
jcifs可从http://jcifs.samba.org/下载;
jcifs 具体解释读取网络共享文件数据的更多相关文章
- Java基础知识强化之网络编程笔记16:Android网络通信之 使用Http的Get方式读取网络数据(基于HTTP通信技术)
使用Http的Get方式读取网络数据,使用Get方式与网络通信是最常见的Http通信,建立链接之后就可以通过输入流读取网络数据. 详见:Android(java)学习笔记209:采用get请求提交数据 ...
- 分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要)
原文:分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要) Java InputStream读取数据问题 ======== ...
- 使用 Http 的 Get 方式读取网络数据
作为移动平台的应用,一定避免不了与网络交换数据,不论是读取网页数据,还是调用API接口,都必须掌握Http通信技术 代码如下: package zw1; import java.io.Buffered ...
- C#读取网络流,读取网络上的js文件
写博客的目的就是让其他人少走弯路. C#读取网络上的流和js文件出现的问题 一开始看了今天博客园上的推荐文章,用C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),然 ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- iOS开发网络篇—数据缓存
iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造 ...
- [Spark][Streaming]Spark读取网络输入的例子
Spark读取网络输入的例子: 参考如下的URL进行试验 https://stackoverflow.com/questions/46739081/how-to-get-record-in-strin ...
- pandas学习(常用数学统计方法总结、读取或保存数据、缺省值和异常值处理)
pandas学习(常用数学统计方法总结.读取或保存数据.缺省值和异常值处理) 目录 常用数学统计方法总结 读取或保存数据 缺省值和异常值处理 常用数学统计方法总结 count 计算非NA值的数量 de ...
- mycat->oracle报java.sql.SQLException: 无法从套接字读取更多的数据
今天下午,测试环境清算的时候又出现了之前的一个异常,这次把错误信息全部打出来了,java.sql.SQLException: 无法从套接字读取更多的数据,是使用mycat连接oracle的,如下所示: ...
随机推荐
- Linux通用KVM自动安装Shell脚本(兼容所有Linux发行版/CentOS/Ubuntu)
官网: https://github.com/retspen/webvirtmgr/wiki/Setup-Host-Server 安装: wget -O - https://retspen.githu ...
- java多线程之同一个锁和分离锁
1.对集合/共享对象的读写方法同一个锁,故无法实现读写并行.典型的就是arrayblockingQueue.数组阻塞队列 2.对同一个数据的读写方法采用分离锁,则可以实现读写并行.典型的就是linkB ...
- web及网络基础
关于本http系列博客 本系列博客内容全部来自或参考自<图解http>,不过博客中的图示基本上为博主自己手动绘制,部分图可能来自其它地方,但都有标注. 常见协议的分类 分层 常见协议 应用 ...
- HTTP 错误 404.0 - Not Found 您要找的资源已被删除、已更名或暂时不可用。
现象:打开一个页面,一直报404异常,但是文件是存在的,打开同一目录下的其它文件都没问题,改文件名也不行,始终找不到原因 解决方案:404异常是一个幌子,实际异常是页面读取了null值,应该报空引用, ...
- iOS中TextView显示HTML文本
在界面布局中,我们会用到各种控件来显示我们想要的数据来进行展示:之前遇到过这样一个问题,我从后台的数据传过来是json,解析过后直接放入一个TextView来进行显示,但是没注意到这个数据里面是HTM ...
- shell 脚本中执行mysql语句
通过hash建表之后,表的数据量巨大2048,那怎么去验证表是否建成功呢? 逻辑生成表名这部分就不写了.只要能建表成功,这部分的脚本肯定是有的.那么怎么在shell中执行selec查询并返回呢 只要在 ...
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)
转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...
- <input type = "submit"> 提交方式和用js的form.submit()有什么区别?
假设: A表单内有<input type="submit">,通过点击这个input来提交表单 B表单内没有<input type="submit&qu ...
- [译]ES读写文档时shard-replication模型
官网页面:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-replication.html 本文是对官网页面的 ...
- java web 拦截器、过滤器理解
1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加 ...