`
super_robin
  • 浏览: 54125 次
  • 性别: Icon_minigender_1
  • 来自: 河南郑州
社区版块
存档分类
最新评论

远程共享文件读写操作

阅读更多
package com.iman.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;

import jcifs.smb.SmbException;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream;

/**
    *  @description:    远程共享读写文件操作工具类    
	*  @author:         luomeng
	*  @createDate:     2009-12-26 上午10:47:25
 */
public class RemoteFileUtil {
	
	public static final String REMOTE_HOST_IP = "192.168.*.*";
	public static final String LOGIN_ACCOUNT = "administrator";
	public static final String LOGIN_PASSWORD = "password";
	public static final String SHARE_DOC_NAME = "shareDoc";
	
	private String remoteHostIp;  //远程主机IP
	private String account;       //登陆账户
	private String password;      //登陆密码
    private String shareDocName;  //共享文件夹名称
    
    
    
    /**
     * 默认构造函数
     */
    public RemoteFileUtil(){
    	this.remoteHostIp = REMOTE_HOST_IP;
		this.account = LOGIN_ACCOUNT;
		this.password = LOGIN_PASSWORD;
		this.shareDocName = SHARE_DOC_NAME;
    }
    
	/**
	 * 构造函数
	 * @param remoteHostIp  远程主机Ip
	 * @param account       登陆账户
	 * @param password      登陆密码
	 * @param sharePath     共享文件夹路径
	 */
    public RemoteFileUtil(String remoteHostIp, String account, String password,String shareDocName) {
		this.remoteHostIp = remoteHostIp;
		this.account = account;
		this.password = password;
		this.shareDocName = shareDocName;
	}	
    
    /**
     * 对远程共享文件进行读取所有行
     * @param remoteFileName  文件名  说明:参数为共享目录下的相对路径
     *                                若远程文件的路径为:shareDoc\test.txt,则参数为test.txt(其中shareDoc为共享目录名称);
     *                                若远程文件的路径为:shareDoc\doc\text.txt,则参数为doc\text.txt;
     * @return  文件的所有行
     */
    public List<String> readFile(String remoteFileName){
    	SmbFile smbFile = null;
    	BufferedReader reader = null;
    	List<String> resultLines = null;
    	//构建连接字符串,并取得文件连接
      	String conStr = null;
    	conStr = "smb://"+account+":"+password+"@"+remoteHostIp+"/"+shareDocName+"/"+remoteFileName;
    	try {
			smbFile = new SmbFile(conStr);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		
        //创建reader
		try {
			reader = new BufferedReader(new InputStreamReader(new SmbFileInputStream(smbFile)));
		} catch (SmbException e) {
			e.printStackTrace();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}		
		//循环对文件进行读取
        String line;
		try {
			line = reader.readLine();
			if(line != null && line.length()>0){
				resultLines = new ArrayList<String>();
			}
			while (line != null) {
	        	resultLines.add(line);
				line = reader.readLine();
	        }
		} catch (IOException e) {
			e.printStackTrace();
		}
        //返回
		return resultLines;
    }
    
    /**
     * 对远程共享文件进行写入
     * @param is                本地文件的输入流
     * @param remoteFileName    远程文件名    说明:参数为共享目录下的相对路径
     *                                             若远程文件的路径为:shareDoc\test.txt,则参数为test.txt(其中shareDoc为共享目录名称);
     *                                             若远程文件的路径为:shareDoc\doc\text.txt,则参数为doc\text.txt;
     * @return  
     */
    public boolean writeFile(InputStream is,String remoteFileName){
    	SmbFile smbFile = null;
    	OutputStream os = null;
    	byte[] buffer = new byte[1024*8];
    	//构建连接字符串,并取得文件连接
      	String conStr = null;
    	conStr = "smb://"+account+":"+password+"@"+remoteHostIp+"/"+shareDocName+"/"+remoteFileName;
    	try {
			smbFile = new SmbFile(conStr);
		} catch (MalformedURLException e) {
			e.printStackTrace();
			return false;
		}
		
		//获取远程文件输出流并写文件到远程共享文件夹
		try {
			os = new BufferedOutputStream(new SmbFileOutputStream(smbFile));
			while((is.read(buffer))!=-1){
				os.write(buffer);		
			}
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} 
		
    	return true;
    }
    
    
    /**
     * 对远程共享文件进行写入重载
     * @param localFileName   要写入的本地文件全名
     * @param remoteFileName  远程文件名    说明:参数为共享目录下的相对路径
     *                                           若远程文件的路径为:shareDoc\test.txt,则参数为test.txt(其中shareDoc为共享目录名称);
     *                                           若远程文件的路径为:shareDoc\doc\text.txt,则参数为doc\text.txt;
     * @return
     */
    public boolean writeFile(String localFileFullName ,String remoteFileName){
    	try {
			return writeFile(new FileInputStream(new File(localFileFullName)),remoteFileName);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return false;
		}
    }
    
    /**
     * 对远程共享文件进行写入重载
     * @param localFileName   要写入的本地文件
     * @param remoteFileName  远程文件名    说明:参数为共享目录下的相对路径
     *                                           若远程文件的路径为:shareDoc\test.txt,则参数为test.txt(其中shareDoc为共享目录名称);
     *                                           若远程文件的路径为:shareDoc\doc\text.txt,则参数为doc\text.txt;
     * @return
     */
    public boolean writeFile(File localFile ,String remoteFileName){
    	try {
			return writeFile(new FileInputStream(localFile),remoteFileName);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return false;
		}
    }
    
    
    public static void main(String[] args){
    	RemoteFileUtil util = new RemoteFileUtil();
//    	List<String> lines = util.readFile("test.txt");
//    	for (String string : lines) {
//			System.out.println(string);
//		}
        util.writeFile(new File("f:/a.csv"), "new.csv");
    }
    
    
    
}



   目前所在的项目,大量的用到了文件的上传。随着项目的扩大,用到了集群,这时候问题就出现了,用户上传到A上的文件下次用的时候服务可能在B上,这时文件就找不到了,所以我们的解决方案就是利用文件共享方式,把所有的文件放到了文件一个服务器上的共享文件夹中,作为文件服务器。所有的服务器写文件的时候都写到文件服务器中,这样就把问价给解决了。
    当然,现在这个工具类中还有加下载文件的方法,其实直接把远程文件读到文件流中,下载的时候用文件就可以了,具体方式可以参照readLines方法
分享到:
评论
1 楼 yybb2277 2011-12-10  
太强了!谢谢!

相关推荐

    远程创建文件

    可实现远程共享文件的文件生成,远程共享文件读写操作

    易语言共享文件模块 远程的时候能用上

    远程文件操作通常比本地操作慢,因此在设计远程共享文件系统时,需要考虑性能优化,如批量读写、缓存策略、预加载等技术。易语言开发者需要理解这些概念,并根据具体应用场景选择合适的方法。 综上所述,易语言...

    java操作共享文件

    Java提供了一些库来实现这一功能,其中之一就是jcifs库,它是一个开源的Java SMB(Server Message Block)客户端,使得Java程序能够方便地操作Windows网络共享文件。在本文中,我们将深入探讨如何使用jcifs库中的...

    远程管理某个共享目录的文件

    在IT行业中,远程管理和共享目录的文件操作是一个重要的议题,特别是在网络编程和系统管理中。ASP.NET是一个由微软开发的强大的Web应用程序框架,它允许开发者创建动态、交互式的Web服务和网页应用。在这个场景中,...

    远程共享usb设备教学软件

    在压缩包文件中,我们看到一个名为“远程共享usb设备教学软件”的文件,这很可能是包含了上述所有功能的软件安装包。用户下载后,不仅可以获得软件本身,还能找到注册码,这意味着软件可能需要激活才能使用。同时,...

    易语言打开局域网共享文件夹源码

    3. **使用“打开网络共享文件”命令**:在适当的地方(如按钮点击事件)调用“打开网络共享文件”命令,传入刚刚定义的共享文件夹路径。这会启动默认的文件浏览器,显示指定的共享文件夹内容。 4. **处理可能的错误...

    java共享文件(windows).rar

    1. **Java文件I/O操作**:Java提供了丰富的API来处理文件读写和目录操作。核心类如`java.io.File`用于表示文件和目录路径,`java.io.FileInputStream`和`java.io.FileOutputStream`用于读写文件,`java.nio`包则提供...

    pb文件远程存取服务系统

    远程存取服务系统旨在解决在分布式环境中对PB文件进行共享、同步和协作的问题。 首先,我们需要理解PB文件的本质。PB全称为Progress Binary,是由Progress Software公司开发的一种二进制文件格式,用于存储和传输...

    超详细!java访问windows共享目录并下载文件

    在Java编程环境中,有时我们需要与Windows操作系统进行交互,例如访问共享目录并下载其中的文件。这个过程涉及到几个关键的技术点,包括系统调用、网络通信和文件操作。在这个场景下,我们将通过`SmbUtils.java`和`...

    JAVA下载远程Linux服务器的文件

    然后,打开本地和远程的文件流,并通过循环读写操作将远程文件的内容复制到本地文件。最后,记得关闭所有打开的流以释放资源。 注意,为了使用jcifs库,你需要在你的项目中添加jcifs-1.3.14.jar作为依赖,这可以...

    java访问共享文件

    jcifs库提供了SmbFile类,它类似Java的File类,可以用来创建、删除、重命名和读写共享文件。下面是一些关键知识点: 1. **jcifs库的引入**:首先,项目中需要添加jcifs库的依赖。如果是Maven项目,可以通过在pom....

    Android smb访问共享文件以及播放共享文件

    在Android平台上,SMB(Server Message Block)协议是一种常见的用于访问网络上共享文件的方法,尤其适合于局域网环境。SMB协议允许设备通过网络共享文件、打印机以及其他资源,广泛应用于Windows、Linux和Unix系统...

    Linux操作系统之间NFS方式共享文件.docx

    本篇文章将详细阐述如何通过NFS在Linux服务器之间共享文件。 首先,启用NFS服务是共享文件的前提。在Linux系统中,你需要启动portmap服务,它是NFS服务依赖的服务,用于映射远程系统调用。然后启动NFS服务本身。你...

    11-windows端向远程服务器传送文件的工具

    它允许用户通过TCP/IP连接访问远程计算机上的文件系统,并进行读写操作。 2. **FileZilla介绍**: - **安装与界面**:FileZilla提供了一个直观的界面,分为两部分:本地站点(Local Site)和远程站点(Remote Site...

    利用jcifs-1.3.15.jar实现共享文件上传下载

    通过SmbFile对象,我们可以对远程共享文件进行创建、读取、写入和删除等操作。 要实现文件上传,我们需要以下步骤: 1. **创建SmbFile对象**:指定远程共享文件的URL,格式通常为`smb://服务器名/共享路径/文件名`...

    rmi远程调用读取文件

    这种方式在分布式系统中非常常见,可以用于数据共享、文件服务等应用。 RMI的基本原理是将对象的方法调用转换为网络通信。首先,客户端通过RMI Registry找到远程服务的引用,然后调用这个引用上的方法,实际的计算...

    java共享文件下载依赖包jcifs-1.3.3.jar

    7. **异步操作**:jcifs库支持异步文件操作,可以在后台线程执行文件读写,避免阻塞主线程,提高应用程序的响应速度。 8. **故障恢复**:jcifs具有一定的错误处理和重试机制,能够处理网络中断、服务器无响应等常见...

    Java读写Windows共享文件夹的方法实例

    总之,Java通过JCIFS库可以方便地实现对Windows共享文件夹的读写操作。这个库使得Java程序员能够在各种操作系统环境中,轻松处理跨平台的文件共享需求。然而,使用过程中需要注意的是,由于涉及到网络通信和权限验证...

    Go语言共享内存读写实例分析

    本文实例分析了Go语言共享内存读写的方法。分享给大家供大家参考。...共享内存用到的是系统提供的mmap函数,它可以将一个文件映射到虚拟内存的一个区域中,程序使用指针引用这个区域,对这个内存区域的操作

    .NET操作共享目录

    至于远程共享目录的读写操作,可以使用`FileStream`类。例如,打开一个共享文件进行写入: ```csharp FileStream fileStream = new FileStream(sharePath + "\\file.txt", FileMode.OpenOrCreate, FileAccess.Write...

Global site tag (gtag.js) - Google Analytics