`
goodguyzl
  • 浏览: 47293 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java 访问共享目录(samba和NFS配置及实现)

阅读更多

      最近需用使用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);        
            }
		
	}

 

 

0
1
分享到:
评论

相关推荐

    Samba和NFS服务器

    综上所述,Samba和NFS服务器在Linux环境中提供了跨平台的文件共享解决方案,它们的配置和管理涉及多个层面,从设置共享资源、管理用户权限到优化性能和安全性。理解和熟练掌握这两个服务的配置和管理对于构建多操作...

    linux常用服务-功能-作用及使用配置方法.pdf

    Linux操作系统中的服务对于系统的正常运行至关重要,其中包括了...总的来说,NFS和Samba是Linux系统中实现跨平台文件共享和资源管理的重要服务,它们的正确配置和使用可以极大地提升网络环境中的协作效率和资源利用率。

    配置Linux操作系统.docx

    NFS (Network File System) 是一种分布式文件系统协议,允许一个系统在网络上共享目录和文件。在本节中,我们将详细介绍如何在CentOS 7.5上安装和配置NFS服务。 **步骤1:进入Root用户** - 使用`su root`命令切换到...

    用Centos7.5配置企业级的服务器

    - 配置Samba服务以实现Windows和其他非Linux系统的文件共享。 #### 实现步骤 1. **安装Samba**: ```bash sudo yum install samba -y ``` - 配置Samba。 ```bash sudo vim /etc/samba/smb.conf [share] path...

    第三方应用使用亚马逊云存储AWS S3的研究总结_亚马逊第三方可靠吗

    Samba是一种在Windows和Linux系统之间进行文件共享的工具,通过Samba配置后,Windows用户可以像访问本地网络共享文件一样访问挂载的S3存储。 在Windows系统上挂载S3服务器的方法也分别在Windows 7(64位)、Windows...

    图片服务器搭建方案.docx

    - **实现思路**:使用NFS服务搭建NFS服务器,设置共享目录后,将应用服务器的某个目录挂载为共享目录,并将上传目录指向该目录。 **2. 优缺点** - **优点**: - 同Windows共享目录的优点。 - 服务器操作系统不...

    Linux运维从入门到高级全套案例v3

    - **搭建Samba服务器**:通过Samba服务实现Linux与Windows之间的文件共享。 - **搭建NFS服务器**:利用Network File System (NFS)服务在Linux系统之间共享文件。 - **搭建FTP服务器**:设置File Transfer ...

    Linux 运维入门到高级.pdf

    - 通过安装 Samba 服务,并编辑 `/etc/samba/smb.conf` 配置文件来设置共享目录。 - **3.1.4 搭建 NFS 服务器** - NFS (Network File System) 用于在网络上共享文件系统。 - 通过安装 NFS 服务并编辑 `/etc/...

    Linux ppt 教程

    以及如何配置Samba服务实现与Windows系统的文件共享,NFS服务实现网络文件系统,FTP服务搭建文件传输,JDK的安装以支持Java开发,Tomcat的部署以运行Java Web应用,以及MySQL数据库的安装和管理。这些内容对于理解和...

    RED HAT LINUX 6大全

    13.4 配置NFS服务器和客户 236 13.4.1 建立/etc/exports文件 237 13.4.2 使用mount加载一个导出的文 件系统 238 13.4.3 卸载文件系统 238 13.4.4 配置/etc/fstab文件以自动加载 文件系统 239 13.5 完成样本配置...

    强烈推荐 Linux运维从入门到高级全套案例教程

    本章节详细介绍了如何在Linux系统上部署各种网络服务,包括但不限于时间同步服务(NTP)、动态主机配置协议(DHCP)、文件共享服务(Samba)、网络文件系统(NFS)、文件传输协议(FTP)、Web服务器(Apache/Nginx)...

    linux常用命令及管理

    3. **Samba服务配置**:Samba是一个使Linux和Windows系统之间进行文件和打印共享的服务。配置Samba涉及修改`/etc/samba/smb.conf`配置文件,设置用户权限,并使用`systemctl start samba`命令启动服务。 4. **JDK...

    小白入门linux入门到高级全套案例

    本部分涵盖了多个核心服务的搭建和配置,包括但不限于NTP时间服务器、DHCP服务器、Samba服务器、NFS服务器、FTP服务器、Apache WEB服务器等。 - **服务部署**: - **NTP时间服务器**: 用于同步网络中的时间。 - **...

    GlusterFS开发与学习

    - **外部架构**:主要包括存储服务器(Brick Server)、客户端和存储网关(如NFS/Samba)。GlusterFS的独特之处在于没有单独的元数据服务器,这有助于提升整体性能。 - **内部架构**:采用模块化堆栈式设计,其中的...

    Linux运维从入门到高级Linux全套案例教程

    Samba服务器可实现Linux与Windows系统的文件共享;NFS服务器则用于网络文件系统的共享;FTP服务器用于文件传输;Apache WEB服务器用于搭建网站;MySQL服务器用于数据库服务;LAMP架构则是构建网站的流行组合,包括...

    Ubuntu 实用教程

    - 文件共享:Samba允许Ubuntu与Windows之间共享文件,NFS用于Linux之间的文件共享。 - SSH服务让远程登录和文件传输成为可能。 7. **安全与备份**: - 更新系统以保持安全,定期运行`sudo apt upgrade --yes`。 ...

    Linux入门到高级

    - 结合Nginx和Tomcat实现静态文件和动态内容的分离。 - 提升网站性能。 - **LNAMP高性能架构**: - Linux、Nginx、MySQL、PHP的组合。 - 更侧重于Nginx的使用。 - **DNS域名解析服务器**: - 将域名转换为IP地址...

    Hadoop云计算环境搭建

    建议将安装位置设为磁盘根目录下的特定文件夹,便于后续管理和访问。 - **Ubuntu安装**: - 配置过程中需要注意设置合适的登录密码等基本信息。 - 安装完成后,默认用户为`root`,密码为安装时设定的密码。 - **...

    My Network Catalog-开源

    "我的网络目录"是一个专为解决这一问题而设计的开源项目,它是一个强大的网络索引引擎,旨在整合并统一管理本地网络上的Windows共享(或Samba)服务,让网络文件的检索变得简单快捷。作为一个开源软件,它不仅提供了...

Global site tag (gtag.js) - Google Analytics