`
zyp307
  • 浏览: 15391 次
  • 性别: Icon_minigender_1
  • 来自: 乌鲁木齐
社区版块
存档分类
最新评论

JAVA上传工具类

    博客分类:
  • JAVA
阅读更多
package com.icelove.util;
 
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
 
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
/**
 * FTP上传工具类
 * @author icelove
 *
 */
public class FtpUtil {
 private String ip = "";
 private String username = "";
 private String password = "";
 private int port = -1;
 private String path = "";
 private FtpClient ftpClient = null;
 private OutputStream os = null;
 private FileInputStream is = null;
 public FtpUtil(String serverIP, String username, String password) {
  this.ip = serverIP;
  this.username = username;
  this.password = password;
 }
 
 public FtpUtil(String serverIP, int port, String username, String password) {
  this.ip = serverIP;
  this.username = username;
  this.password = password;
  this.port = port;
 }
 
 /**    
  * 连接ftp服务器    
  * @throws IOException    
  */
 public boolean connectServer() {
  ftpClient = new FtpClient();
  try {
   if (this.port != -1) {
    ftpClient.openServer(this.ip, this.port);
   } else {
    ftpClient.openServer(this.ip);
   }
   ftpClient.login(this.username, this.password);
   if (this.path.length() != 0) {
    ftpClient.cd(this.path);// path是ftp服务下主目录的子目录                 
   }
   ftpClient.binary();// 用2进制上传、下载      
   System.out.println("已登录到\"" + ftpClient.pwd() + "\"目录");
   return true;
  } catch (IOException e) {
   e.printStackTrace();
   return false;
  }
 }
 
 /**    
  * 断开与ftp服务器连接    
  * @throws IOException    
  */
 public boolean closeServer() {
  try {
   if (is != null) {
    is.close();
   }
   if (os != null) {
    os.close();
   }
   if (ftpClient != null) {
    ftpClient.closeServer();
   }
   System.out.println("已从服务器断开");
   return true;
  } catch (IOException e) {
   e.printStackTrace();
   return false;
  }
 }
 
 /**    
  * 检查文件夹在当前目录下是否存在    
  * @param dir    
  * @return    
  */
 private boolean isDirExist(String dir) {
  String pwd = "";
  try {
   pwd = ftpClient.pwd();
   ftpClient.cd(dir);
   ftpClient.cd(pwd);
  } catch (Exception e) {
   return false;
  }
  return true;
 }
 
 /**    
  * 在当前目录下创建文件夹    
  * @param dir    
  * @return    
  * @throws Exception    
  */
 private boolean createDir(String dir) {
  try {
   ftpClient.ascii();
   StringTokenizer s = new StringTokenizer(dir, "/"); //sign      
   s.countTokens();
   String pathName = ftpClient.pwd();
   while (s.hasMoreElements()) {
    pathName = pathName + "/" + (String) s.nextElement();
    try {
     ftpClient.sendServer("MKD " + pathName + "\r\n");
    } catch (Exception e) {
     e = null;
     return false;
    }
    ftpClient.readServerResponse();
   }
   ftpClient.binary();
   return true;
  } catch (IOException e1) {
   e1.printStackTrace();
   return false;
  }
 }
 
 /**    
  * ftp上传    
  * 如果服务器段已存在名为filename的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换    
  *     
  * @param filename 要上传的文件(或文件夹)名    
  * @return    
  * @throws Exception    
  */
 public boolean upload(String filename) {
  String newname = "";
  if (filename.indexOf("/") > -1) {
   newname = filename.substring(filename.lastIndexOf("/") + 1);
  } else {
   newname = filename;
  }
  return upload(filename, newname);
 }
 
 /**    
  * ftp上传    
  * 如果服务器段已存在名为newName的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换    
  *     
  * @param fileName 要上传的文件(或文件夹)名    
  * @param newName 服务器段要生成的文件(或文件夹)名    
  * @return    
  */
 public boolean upload(String fileName, String newName) {
  try {
   String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");
   File file_in = new File(savefilename);//打开本地待长传的文件      
   if (!file_in.exists()) {
    throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");
   }
   if (file_in.isDirectory()) {
    upload(file_in.getPath(), newName, ftpClient.pwd());
   } else {
    uploadFile(file_in.getPath(), newName);
   }
 
   if (is != null) {
    is.close();
   }
   if (os != null) {
    os.close();
   }
   return true;
  } catch (Exception e) {
   e.printStackTrace();
   System.err.println("Exception e in Ftp upload(): " + e.toString());
   return false;
  } finally {
   try {
    if (is != null) {
     is.close();
    }
    if (os != null) {
     os.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }
 
 /**    
  * 真正用于上传的方法    
  * @param fileName    
  * @param newName    
  * @param path    
  * @throws Exception    
  */
 private void upload(String fileName, String newName, String path) throws Exception {
  String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");
  File file_in = new File(savefilename);//打开本地待长传的文件      
  if (!file_in.exists()) {
   throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");
  }
  if (file_in.isDirectory()) {
   if (!isDirExist(newName)) {
    createDir(newName);
   }
   ftpClient.cd(newName);
   File sourceFile[] = file_in.listFiles();
   for (int i = 0; i < sourceFile.length; i++) {
    if (!sourceFile[i].exists()) {
     continue;
    }
    if (sourceFile[i].isDirectory()) {
     this.upload(sourceFile[i].getPath(), sourceFile[i].getName(), path + "/" + newName);
    } else {
     this.uploadFile(sourceFile[i].getPath(), sourceFile[i].getName());
    }
   }
  } else {
   uploadFile(file_in.getPath(), newName);
  }
  ftpClient.cd(path);
 }
 
 /**    
  *  upload 上传文件    
  *     
  * @param filename 要上传的文件名    
  * @param newname 上传后的新文件名    
  * @return -1 文件不存在 >=0 成功上传,返回文件的大小    
  * @throws Exception    
  */
 public long uploadFile(String filename, String newname) throws Exception {
  long result = 0;
  TelnetOutputStream os = null;
  FileInputStream is = null;
  try {
   java.io.File file_in = new java.io.File(filename);
   if (!file_in.exists())
    return -1;
   os = ftpClient.put(newname);
   result = file_in.length();
   is = new FileInputStream(file_in);
   byte[] bytes = new byte[1024];
   int c;
   while ((c = is.read(bytes)) != -1) {
    os.write(bytes, 0, c);
   }
  } finally {
   if (is != null) {
    is.close();
   }
   if (os != null) {
    os.close();
   }
  }
  return result;
 }
 
 /**    
  * 从ftp下载文件到本地    
  *     
  * @param filename 服务器上的文件名    
  * @param newfilename 本地生成的文件名    
  * @return    
  * @throws Exception    
  */
 public long downloadFile(String filename, String newfilename) {
  long result = 0;
  TelnetInputStream is = null;
  FileOutputStream os = null;
  try {
   is = ftpClient.get(filename);
   java.io.File outfile = new java.io.File(newfilename);
   os = new FileOutputStream(outfile);
   byte[] bytes = new byte[1024];
   int c;
   while ((c = is.read(bytes)) != -1) {
    os.write(bytes, 0, c);
    result = result + c;
   }
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    if (is != null) {
     is.close();
    }
    if (os != null) {
     os.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  return result;
 }
 
 /**    
  * 取得相对于当前连接目录的某个目录下所有文件列表    
  *     
  * @param path    
  * @return    
  */
 public List getFileList(String path) {
  List list = new ArrayList();
  DataInputStream dis;
  try {
   dis = new DataInputStream(ftpClient.nameList(this.path + path));
   String filename = "";
   while ((filename = dis.readLine()) != null) {
    list.add(filename);
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
  return list;
 }
 
 public static void main(String[] args) {
  FtpUtil ftp = new FtpUtil("133.224.202.2", "tstbill", "tstbill");
  ftp.connectServer();
  boolean result = ftp.upload("C:/test_why", "test_why/test");
  System.out.println(result ? "上传成功!" : "上传失败!");
  List list = ftp.getFileList("test_why/test");
  for (int i = 0; i < list.size(); i++) {
   String name = list.get(i).toString();
   System.out.println(name);
  }
  ftp.closeServer();
  /**    
  FTP远程命令列表    
  USER    PORT    RETR    ALLO    DELE    SITE    XMKD    CDUP    FEAT    
  PASS    PASV    STOR    REST    CWD     STAT    RMD     XCUP    OPTS    
  ACCT    TYPE    APPE    RNFR    XCWD    HELP    XRMD    STOU    AUTH    
  REIN    STRU    SMNT    RNTO    LIST    NOOP    PWD     SIZE    PBSZ    
  QUIT    MODE    SYST    ABOR    NLST    MKD     XPWD    MDTM    PROT    
  在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上\r\n    
  ftpclient.sendServer("XMKD /test/bb\r\n"); //执行服务器上的FTP命令    
  ftpclient.readServerResponse一定要在sendServer后调用    
  nameList("/test")获取指目录下的文件列表    
  XMKD建立目录,当目录存在的情况下再次创建目录时报错    
  XRMD删除目录    
  DELE删除文件    
   */
 }
}

 

分享到:
评论

相关推荐

    java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类

    java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件...

    java 文件上传工具类 java 文件上传工具类

    java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java ...

    Java文件工具类

    Java文件工具类

    java 上传文件工具类 java 上传文件工具类

    java 上传文件工具类 java 上传文件工具类java 上传文件工具类 java 上传文件工具类java 上传文件工具类 java 上传文件工具类

    上传下载工具类java

    `上传工具类使用说明.docx`文件应该是对`UploadUtils.java`类的详细使用指南,包括如何初始化、调用上传和下载方法、配置服务器地址、处理可能出现的问题等。这份文档对于开发者来说是非常宝贵的,可以快速理解并...

    FileUploadUtil.java(文件上传工具类)

    文件上传工具类,上传文件,上传导入文件到path文件夹下,判断图片大小是否超过要求,上传多张图片到服务器,上传图片到服务器,上传文件(在指定目录下创建年月日目录),上传导入文件到temp文件夹下,删除指定...

    Java开发工具类

    Class类工具 \Cookie工具类 \excel读取 工具类\Java如何生成验证码图片和点击刷新验证码\java获取当前月第一天和最后一天,上个月第一天和最后一天\java实现ftp文件的上传与下载\Json工具类 - JsonUtils.java\JS...

    java文件上传下载工具类

    以下是对"java文件上传下载工具类"这一主题的详细解释。 首先,让我们了解文件上传。在Web应用中,用户可能需要上传文件,如图片、文档或视频。Java通过Servlet API提供了处理文件上传的功能。Servlet 3.0及以上...

    java上传文件(图片)工具类,可直接使用

    java上传文件util包,可直接使用,需将地址改为自己的存储地址,

    java版ftp上传下载工具类

    Java版FTP上传下载工具类简化了与FTP服务器交互的过程,通过封装相关操作,使得开发者可以便捷地进行文件的上传和下载任务。 `FtpUtil.java` 文件是这个工具类的核心,它通常会包含以下关键组件: 1. **连接设置**...

    java上传ftp服务器工具类

    java上传ftp服务器工具类,提供完成的方法,直接调用即可

    上传文件的java工具类代码

    java上传文件的java工具类代码,希望大家参考

    JAVA 操作FTP的工具类,上传,下载,删除功能都有了。

    总之,这个Java FTP工具类是开发中的一个宝贵资源,它简化了与FTP服务器的交互,包括文件的上传、下载和删除。通过学习和使用此类,开发者可以更高效地实现FTP相关的功能,提高工作效率,并且能够更好地应对各种网络...

    java常用的工具类整理28个

    在Java编程语言中,工具类(Utility Class)是包含各种静态方法的类,这些方法用于执行特定任务,如数据操作、文件处理、数学计算等。它们通常不包含实例变量,只提供静态方法服务,帮助开发者提高代码的复用性和...

    java上传并读取excel工具类

    可以使用Java内置的`ZipInputStream`和`ZipEntry`类,或者使用第三方库如Apache Commons Compress。解压后,每个文件都可以转换为`File`对象进行后续处理。 3. **读取Excel文件**: 使用Apache POI,我们可以通过`...

    Java使用NFS实现上传、下载、读取文件工具类

    封装性:工具类封装了NFS相关的复杂连接、认证和I/O操作细节,使得业务层代码无需关心底层通信协议,只需通过简单API即可操作远程文件。 可配置性:允许灵活配置NFS服务器地址、挂载点以及其他相关参数,使工具类...

    SFTP上传工具类

    java SFTP上传工具类

    常用Java工具类

    3. **文件上传工具类**:文件上传是Web应用中的常见功能,Java提供了Servlet API来处理文件上传请求。Apache的Commons FileUpload库提供了一套方便的工具类,可以解析多部分请求,将文件保存到服务器。这类工具类...

    java httpclient https或http及文件中转上传工具类

    该工具类使用httpclient进行http or https请求,包括requestbody格式和form表单格式,另外含文件服务器中转上传方法,几乎支持所有常用接口调用,内含详细注释和说明文件,含jar包,及maven方式引用,拿过去直接用吧

    java开发工具类(14个)

    1. 图片上传工具类: 这个工具类通常包含了处理图像文件上传到服务器的相关逻辑,可能包括图片的压缩、格式转换、尺寸调整等功能。在Android开发中,它可以帮助优化图片资源,减少网络传输的数据量,提高上传效率。...

Global site tag (gtag.js) - Google Analytics