`

file文件的拷贝 以及ftp的下载

 
阅读更多
package com.zte.xh.fund.util;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketException;
import java.nio.channels.FileChannel;
import java.util.Properties;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import com.jfinal.kit.PropKit;
import com.mysql.jdbc.StringUtils;

/**
 * 用来对文件操作的一些方法
 * 
 * @author Jay_Lee
 *
 */
public class FileUtil {
	// ftp的propertis信息
	private static Properties properties = PropKit.use(
			"config/manager.properties", "utf-8").getProperties();
	// ftp上传的信息
	private static final String IP = properties.getProperty("ip"); // 服务器IP地址
	private static final String USER_NAME = properties.getProperty("userName"); // 用户名
	private static final String PWD = properties.getProperty("pwd"); // 密码
	private static final int PORT = Integer.valueOf(properties
			.getProperty("port")); // 端口号
	public static final String PATH = properties.getProperty("filepath"); // 读取文件的存放目录(也是下载目录)
	public static FTPClient ftpClient = null;

	/**
	 * copy文件给另一个文件
	 * 
	 * @param sourceFile
	 * @param toFile
	 */
	public static void copyFile(File sourceFile, File toFile) {
		FileInputStream fi = null;
		FileOutputStream fo = null;
		FileChannel in = null;
		FileChannel out = null;
		try {
			fi = new FileInputStream(sourceFile);
			fo = new FileOutputStream(toFile);
			// 得到对应的文件通道
			in = fi.getChannel();
			// 得到对应的文件通道
			out = fo.getChannel();
			// 连接两个通道,并且从in通道读取,然后写入out通道
			in.transferTo(0, in.size(), out);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fi.close();
				in.close();
				fo.close();
				out.close();
			} catch (IOException e) {

				e.printStackTrace();

			}
		}
	}

	/**
	 * 获得新的文件名
	 * 
	 * @param name
	 * @return
	 */
	public static String newFileName(String name) {
		String type = name.substring(name.indexOf("."), name.length());
		String newn = String.valueOf(System.currentTimeMillis());
		return newn + type;
	}

	/**
	 * 输出文件的输出流
	 * 
	 * @param filePath
	 * @param out
	 * @throws Exception
	 */
	public static void outFile(String filePath, OutputStream out)
			throws Exception {

		File file = new File(filePath);
		FileInputStream fis = new FileInputStream(file);

		byte[] tempB = new byte[1024];
		int tempFlag;
		while ((tempFlag = fis.read(tempB)) != -1) {
			out.write(tempB, 0, tempFlag);
		}
		fis.close();
		out.flush();
		out.close();
	}

	/**
	 * 判断文件的格式
	 * 
	 * @param fileName
	 * @return
	 */
	public static String getFileType(String fileName) {
		String fileType = fileName.substring(fileName.lastIndexOf(".") + 1,
				fileName.length());
		return fileType;
	}

	// ftp上传文件到服务器
	public static String uploadToFtp(String ftpPath, String filePath,
			String fileName) throws SocketException, IOException {
		String returnMessage = "0";
		try {
			ftpConne();
			int returnCode = ftpClient.getReplyCode();
			FileInputStream fis = null;
			if (FTPReply.isPositiveCompletion(returnCode)) {
				ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
				// 登陆成功设置上传目录
				File f = new File(filePath);
				createPath(ftpPath);
				ftpClient.changeWorkingDirectory(ftpPath);
				fis = new FileInputStream(f);
				ftpClient.storeFile(fileName, fis);
				returnMessage = "1";
			} else {
				returnMessage = "0";
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("FTP客户端出错!", e);
		} finally {
			// 关闭链接
			if (ftpClient.isConnected()) {
				ftpClient.logout();
				ftpClient.disconnect();
			}
		}
		return returnMessage;
	}

	// ftp判断是否存在目录,不存在则创建
	public static void createPath(String paths) {
		try {
			// 解析path的地址是否包含子路劲
			String[] ps = paths.split("/");
			String rp = "";
			boolean isexist = false;
			for (String path : ps) {
				if (StringUtils.isNullOrEmpty(path)) {
					continue;
				}
				rp += "/" + path;
				isexist = ftpClient.changeWorkingDirectory(rp);
				if (!isexist) {
					ftpClient.makeDirectory(path);
					ftpClient.changeWorkingDirectory(rp);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("创建文件夹出错!", e);
		}
	}

	/**
	 * 从ftp下载文件
	 * 
	 * @param localFileName
	 *            本地文件名
	 * @param remoteFileName
	 *            远程文件名
	 */
	public static String downFromFtp(String localPath, String remotePath,
			String fileName) {
		BufferedOutputStream buffOut = null;
		String result = "";
		try {
			ftpConne();
			buffOut = new BufferedOutputStream(new FileOutputStream(localPath));
			boolean isExist = ftpClient.changeWorkingDirectory(remotePath);
			if (!isExist) {
				result = "3";
				System.out.println("路径不存在");
			}
			ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
			ftpClient.retrieveFile(fileName, buffOut);
			result = "1";
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (buffOut != null)
					buffOut.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return result;
	}

	// ftp的链接
	public static void ftpConne() {
		try {
			ftpClient = new FTPClient();
			ftpClient.setBufferSize(1024 * 1024 * 2);
			ftpClient.setControlEncoding("UTF-8");
			ftpClient.enterLocalPassiveMode();
			ftpClient.connect(IP, PORT);
			ftpClient.login(USER_NAME, PWD);
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("FTP链接出错!", e);
		}
	}

	public static void downFile(String realPath, String enName,
			String flieName, int flag, OutputStream out) throws Exception {
		String filePath = null;
		if (flag == 1) {
			String fileM = realPath + File.separator + "template"
					+ File.separator + enName;
			filePath = realPath + File.separator + "template" + File.separator
					+ enName + File.separator + flieName;
			File file = new File(fileM);
			if (!file.exists()) {
				file.mkdirs();
				downFromFtp(filePath, PATH + "template/" + enName, flieName);
			}
		}
		if (flag == 2) {
			String fileM = realPath + File.separator + "details"
					+ File.separator + enName;
			filePath = realPath + File.separator + "details" + File.separator
					+ enName + File.separator + flieName;
			File file = new File(fileM);
			if (!file.exists()) {
				file.mkdirs();
				downFromFtp(filePath, PATH + "details/" + enName, flieName);
			}
		}
		File file = new File(filePath);
		FileInputStream fis = new FileInputStream(file);

		byte[] tempB = new byte[1024];
		int tempFlag;
		while ((tempFlag = fis.read(tempB)) != -1) {
			out.write(tempB, 0, tempFlag);
		}

		fis.close();
		out.flush();
		out.close();
	}

	// 测试demo
	public static void main(String[] args) throws SocketException, IOException {
		FileUtil.ftpConne();
		FileUtil.uploadToFtp(PATH, "f:" + File.separator + "测试.xls",
				"测试.xls");

		// FileUtil.downFromFtp("f:" + File.separator + "测试.xls",
		// PATH,"测试.xls");

               // 在action中调用此方法,直接在页面展示图片
                  FileUtil.outFile(localPath, getResponse().getOutputStream());
	}
}
分享到:
评论

相关推荐

    ftp命令拷贝文件

    ### FTP命令拷贝文件知识点详解 #### 一、FTP简介 FTP(File Transfer Protocol)即文件传输协议,是一种用于在网络上进行文件传输的标准协议。FTP基于客户端/服务器模型,支持两种数据传输模式:ASCII模式和二...

    FTP文件拷贝(边拷贝边删除).rar

    标题中的“FTP文件拷贝(边拷贝边删除)”指的是一个功能强大的FTP文件传输程序,它不仅能够将FTP服务器上的文件下载到本地,而且在拷贝过程中还支持自动删除源文件,这在需要释放远程存储空间或者确保文件一次性转移...

    批处理实现自动传输FTP服务器文件

    FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的协议,它允许用户在不同的计算机之间上传和下载文件。无论是DOS还是UNIX操作系统,FTP都提供了丰富的命令集来帮助用户高效地管理文件传输任务。熟练...

    php的FTP操作类( 拷贝、移动、删除文件 创建目录 ).zip

    为了方便开发者在PHP中处理FTP相关的任务,如拷贝、移动、删除文件以及创建目录,经常会使用到FTP操作类。本篇文章将深入探讨这个PHP的FTP操作类,并解释其核心功能和使用方法。 首先,FTP操作类通常包含了一系列的...

    java实现文件上传到FTP和从FTP下载到本地功能

    本文将详细讲解如何使用Java实现文件上传到FTP服务器以及从FTP服务器下载到本地的功能。 首先,为了实现FTP功能,我们需要引入相关的库。尽管提供的压缩包中没有包含jar文件,但通常我们会使用Apache Commons Net库...

    Linux远程拷贝之ftp与scp命令

    ftp 命令的使用方法非常简单,例如,要从远程主机上下载一个文件,可以使用以下命令:ftp> get test1.in 二、scp 命令 scp 命令是 Secure Copy 的缩写,用于在 Linux 主机之间安全地传输文件。scp 命令的基本语法...

    FTP上传下载工具FastCopy1.99r3_yfy

    FTP下载则相反,让用户能够从远程服务器获取文件到本地计算机。这同样适用于备份远程数据或获取网络资源。FastCopy 的下载功能同样具备高速和稳定性,可以处理各种复杂的网络环境。 FastCopy1.99r3_yfy.exe 是该...

    任意文件拷贝

    在IT行业中,"任意文件拷贝"涉及到的是文件操作的基础知识,主要涵盖文件的复制、移动、重命名等。在Windows、Linux或Mac等操作系统中,文件拷贝是日常工作中非常常见的一种操作。以下是关于“任意文件拷贝”的详细...

    文件拷贝 网络文件传输

    本篇文章将深入探讨这两个主题,特别是针对文件夹的拷贝操作以及使用C#进行网络文件传输的方法。 首先,文件拷贝是指将一个或多个文件从一个位置复制到另一个位置的过程。在Windows操作系统中,这可以通过简单的...

    内部网中不同机器间的文件拷贝方法

    本文将总结三种主要的文件拷贝方法:FTP(文件传输协议)、HTTP(超文本传输协议)以及硬拷贝方法,并重点介绍硬拷贝方法的C#实现。 1. FTP(文件传输协议)方法: FTP是一种基于TCP的协议,用于在互联网上可靠地...

    计算机网络课程设计 ftp文件传输系统 源代码

    简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载(download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。在TCP/IP协议...

    linux下ftp离线包

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而...

    FTP基于MFC对话框实现与服务器文件传输

    FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件的上传和下载。在Windows操作系统中,可以通过Microsoft Foundation Class(MFC)库来实现一个基于对话框的应用程序,方便用户交互...

    FTP操作类( 上传、拷贝、移动、删除文件创建目录 )

    这包括如何通过PHP实现基本的FTP操作,如文件的上传、复制、移动、删除以及目录的创建等。 ### FTP 操作类详解 #### 1. 类的定义与初始化 - **类名**:`class_ftp` - **成员变量**: - `$off`:布尔值,用于表示...

    H3C交换机通过tftp拷贝版本文件.pdf

    本文将详细讲解如何在H3C交换机上通过TFTP(Trivial File Transfer Protocol)服务来拷贝版本文件,以便于更新或备份设备软件。 首先,进行这项操作的前提条件是确保你有必要的硬件连接。通常,这需要一条网线用于...

    apache-ftpserver-1.1.1.zip

    FTP 是FileTransfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序 (Application)。基于不同的操作系统有不同的FTP应用程序,而...

    FTP windows版服务器

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而...

    php的FTP操作类( 拷贝、移动、删除文件 创建目录 )

    为了方便地执行FTP操作,PHP提供了一系列内置的FTP函数,允许开发者编写FTP操作类,实现文件的上传、下载、拷贝、移动、删除以及目录的创建等功能。本篇文章将详细介绍如何利用PHP实现这些操作,并探讨一个FTP操作类...

    网络之间之间拷贝文件

    1. **文件传输协议**:在局域网(LAN)中,最常见的文件传输协议有FTP(File Transfer Protocol)、SFTP(Secure File Transfer Protocol)、SCP(Secure Copy Protocol)以及Windows环境下的共享文件夹。...

    FTP服务概念与原理.pdf

    FTP(File Transfer Protocol)文件传输协议是 TCP/IP 协议组中的协议之一,旨在提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。FTP 服务概念与原理主要包括 FTP 的基本...

Global site tag (gtag.js) - Google Analytics