- 浏览: 46036 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
guji528:
终于明白,原来不是用service_name连接的
ORA-12505 connection refuse 解决办法及总结
最近需用使用java访问linux下的共享目录,实现文件下载和上传, 由于linux共享文件主要采用两种方式,samba和NFS,samba是基于Microsoft的smb/cifs协议, NFS网络文件系统(Network File System)则是另一种协议. 对这两种方式的配置和实现代码如下:(配置在Ubuntu下完成)
一,samba
(1)配置:
a ) 建立共享目录: mkdir /home/pirate/smbshare, chmod 777 smbshare
b) 安装samba, sudo apt-get install samba, sudo apt-get install smbfs
c) 修改samba配置文件, sudo gedit /etc/samba/smb.conf, 在文件最后添加如下行:
[smbshare] #-----共享名字, 客户端访问时需使用这个名字
path = /home/pirate/smbshare
available = yes
browsealbe = yes
public = yes
writable = yes
d) 创建共享用户: sudo useradd aaa
f) 重启samba, sudo /etc/init.d/samba restart
(2) java访问
访问Samba共享依赖于一个第三方包:jcifs-1.3.15.jar, 下载地址http://jcifs.samba.org/
public void downloadViaShare(final String ip,final String user,final String password,final String dir)
{
logger.debug("Share(SMB) download!");
String newDir = dir;
String url = "";
SmbFile [] fileList = null;
FileOutputStream fos = null;
SmbFileInputStream smbIs = null;
byte [] buffer = new byte[8192];
int readBytes = 0;
int totalBytes = 0;
if (!dir.endsWith("/")) //directory must end with "/"
newDir = dir+"/";
url = "smb://"+user+":"+password+"@"+ip+"/"+newDir;
long startTime = System.currentTimeMillis();
try {
SmbFile shareDir = new SmbFile(url);
if(shareDir.isDirectory())
{
fileList = shareDir.listFiles();
for(int i=0;i<fileList.length;i++)
{
if(fileList[i].isFile())
{
smbIs = new SmbFileInputStream((SmbFile)fileList[i]);
fos = new FileOutputStream(new File(tempDir+File.separator+fileList[i].getName()));
while((readBytes = smbIs.read(buffer)) > 0 )
{
fos.write(buffer,0,readBytes);
totalBytes += readBytes;
}
smbIs.close();
fos.close();
logger.debug(fileList[i].getName() + " is downloaded!");
try
{
fileList[i].delete();
}catch(SmbAuthException smbae )
{
logger.debug(fileList[i].getName()+" can not be deleted!");
}
}
}
long endTime = System.currentTimeMillis();
long timeTaken = endTime-startTime;
logger.debug(totalBytes +"bytes downloaded in " + timeTaken/1000 + " seconds at "+ (( totalBytes / 1000 ) / Math.max( 1, ( timeTaken / 1000 ))) + "Kb/sec");
}
}catch(MalformedURLException urle)
{
logger.debug("Incorrect URL format!");
}catch (SmbException smbe) {
smbe.printStackTrace();
logger.debug(this.getClass().getName()+"||"+smbe.getMessage());
}catch(IOException ioe)
{
ioe.printStackTrace();
logger.debug(this.getClass().getName()+"||"+ioe.getMessage());
}finally
{
try
{
smbIs.close();
fos.close();
}catch(Exception smbe)
{
logger.debug(this.getClass().getName()+"||"+smbe.getMessage());
}
}
}
二,NFS
(1) 配置
a) 安装NFS, sudo apt-get install nfs-kernel-server
b) 建立共享目录: mkdir /home/pirate/nfsshare
c) 编辑配置: sudo gedit /etc/exports ,在最后添加如下行:
/home/pirate/nfsshare *(rw,sync,no_all_squash),含义为:
共享目录 允许访问的网络段(读写权限,数据发送方式,客户端权限)
其它Ubuntu nfs常用的参数有:
ro 只读访问
rw 读写访问sync 所有数据在请求时写入共享
async nfs在写入数据前可以响应请求
secure nfs通过1024以下的安全TCP/IP端口发送
insecure nfs通过1024以上的端口发送
wdelay 如果多个用户要写入nfs目录,则归组写入(默认)
no_wdelay 如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置。
hide 在nfs共享目录中不共享其子目录
no_hide 共享nfs目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的GID
d) 重启 NFS: sudo service portmap restart , sudo service nfs-kernel-server restart
e) 测试: showmount -e,查看是否有该目录的共享
(2) 代码
话说这段代码虽然很简单,却费了我不少力气。JDK本身是没有访问NFS的功能,只能用第三方包了,google后发觉用java访问NFS的应用很少,竟然没找到可用的示例,远不如samba那么多,而且只有sun的webnfs可用来访问NFS,在http://yanfs.dev.java.net 上只有一个一个的散装源码, 打包后的jar都没地方下,连API文档都没有. 愁煞我也. 找来找去,根据sun的在线文档摸索出了点头绪.
public void downloadViaNFS(final String ip,final String user,final String password,final String dir) { logger.debug("NFS download begin!"); try { String url = "nfs://"+ip+"/"+dir; XFile xf = new XFile(url); if (xf.exists()) { logger.debug("URL is OK!"); }else { logger.debug("URL is bad!"); return; } XFileExtensionAccessor nfsx = (XFileExtensionAccessor)xf.getExtensionAccessor(); if(!nfsx.loginPCNFSD(ip, user, password)) { logger.debug("login failed!");return; } String [] fileList = xf.list(); XFile temp = null; long startTime = System.currentTimeMillis(); int filesz = 0; for(String file:fileList) { temp = new XFile(url+"/"+file); XFileInputStream in = new XFileInputStream(temp) ; XFileOutputStream out = new XFileOutputStream(tempDir+File.separator+file); int c; byte[] buf = new byte[8196]; while ((c = in.read(buf)) > 0) { filesz += c; out.write(buf, 0, c); } logger.debug(file +" is downloaded!"); in.close(); out.close(); if (temp.canWrite()) { temp.delete(); logger.debug(file + " is deleted!"); }else { logger.debug(file + " can not be delted!"); } } long endTime = System.currentTimeMillis(); long timeDiff = endTime - startTime; int rate = (int) ((filesz /1000) / (timeDiff / 1000.0)); logger.debug(filesz + " bytes copied @ " + rate + "Kb/sec"); }catch (IOException e) { logger.debug(e); } }
发表评论
-
Java private属性的继承问题
2011-07-28 17:44 0项目中的一个 ... -
HashMap对象重复赋值在多线程中的教训
2011-02-28 23:18 2174分享个教训,因为这个小错误,我付出了三天时间来找原因 ... -
GWT 初学笔记
2011-02-22 11:15 971初学GWT,一个用java来写web前端UI的技术。在 ... -
eclipse项目 打包前后的路径变化
2011-01-07 16:03 2534谨以此文,纪念为了搞清楚eclipse项目路径问题而 ... -
Ibatis 数据源的动态配置之二
2010-12-15 17:28 1780在之前写的那篇Ibatis 数据源的动态配置里 ... -
Ibatis 数据源的动态配置
2010-12-07 14:04 1705项目中有个需求,要将一个源数据库的记录迁移到目的数 ... -
第一个hibernate应用
2010-08-23 15:24 0今天打算开始学习一下Hibernate,从做一个 ... -
shell script 读取property 文件 (配置文件)
2010-07-28 10:15 2648工作中需要写个shell script, ... -
Algorithm negotiation fail 解决办法之一
2010-07-15 14:21 8082项目中有个问题,需要用纯java方式连上 ... -
%1 not a valid win32 application一种解决方案
2010-07-02 10:18 5811可能很多人在windows下安装程序的时候都遇到 ...
相关推荐
8.1 Samba服务器概述 8.2 配置smb.conf、添加samba用户 8.3 Samba三种配置方法 ...8.6 Windows访问Samba 8.7 NFS服务器概述 8.8 启动NFS 8.9 NFS配置文件 8.10 NFS服务器配置工具 8.11挂载/卸载NFS
samba共享服务器配置文件,简单实现samba服务器共享多个文件夹,下载替换/etc/samba/smb.conf文件即可
实验二:Samba匿名访问配置 一、实验目的 掌握Samba匿名访问控制配置 掌握访问Samba服务器的共享文件 二、实验内容与步骤 1、 Samba匿名访问控制配置 公共匿名类共享目录的配置(即匿名账户访问共享目录或文件) # ...
1. 利用rpm命令安装软件包的方法; 2. 安装、配置Samba服务器并启动; 3. 从Linux访问Windows资源; 4. 从Windows访问Linux的资源。
Linux NFS Samba 服务配置
REDHAT 共享服务器配置(NFS+SAMBA)
Linux作为一种流行的开源服务器平台,在业界得到了普遍认可,以RedHat、CentOS为首的Linux厂商在服务器...本章将对Linux下的Apache网页服务器、FTP服务器、SendMail邮件服务器和DNS服务器的配置和使用方法进行介绍。
提供了fedora12的 tftp samba nfs 的安装,其安装过程可能碰到问题的处理方式
飞腾ARM64架构下cifs和nfs详细安装流程,可导出为云主机模板应用于各种场合,文档中所使用的资源名称均为开源资源,可提供下载链接;飞腾ARM64架构下cifs和nfs详细安装流程,可导出为云主机模板应用于各种场合,文档...
为了实现tomcat在windows2003和centos6.5的混合集群,实现系统上传的文件到一个共享目录,采用了在服务器端安装samba和nfs服务,分别解决windows2003和centos6.5的文件共享。
(3) 配置samba服务器,要求如下:samba服务器上有个tech1目录,此目录只有boy用户可以游览访问,其他人都不可以游览和访问。请灵活使用独立配置文件,给出实现方案并上机调试 (4) 上机完成企业实战案例的samba...
本文详细介绍了Samba共享目录的多用户权限设置案例,部署过程和配置说明十分详细,有用到的朋友请拿走.
一、NFS的安装与配置 共享/nfs/a1, 使192.168.28.0/...共享目录/samba/b2,仅用户bys和组gd成员可以访问,仅bys有可写的权限; 共享目录/samba/b3,任何人可以读写,但不同的用户只能访问创建的文件夹。 三、DHCP的使用
Linux系统下用samba工具实现文件共享及共享打印机的配置
Samba服务器的配置
Ubuntu下配置samba实现Windows文件夹共享
Samba与NFS服务器的配置与管理.pptx
ubuntu虚拟机及常用工具安装并配置samba共享目录。讲述了如何安装常用工具,并且如何配置samba共享目录,并且自测通过
linux命令行,day1ftp和samba和nfs服务详细笔记文档