如果用到了判断文件是否存在的方法,其实是遍历文件的方法需要吧jdk升级到1.6.023以上的版本,低于1.7
1.将JDK换成1.6.023或者以上的,如果不行进行下面的办法操作。
2.缺少了jakarta-oro-2.0.8.jar文件,将此包放入工程中(这个我试过不行,还是第一种,吧jdk1.6替换未1.6.023以上的版本,不能超过1.7
还有ftp容易出现乱码,以及中文无法创建
String str = "何清华问佳111";
FTPUtils ftpUtil = getInstance();
ftpUtil.connect();
ftpUtil.open();
ftpUtil.mkdirs( new String(str.getBytes("UTF-8"),"iso-8859-1"));
ftpUtil.close();
今天给大家带来自己写的ftp操作类,主要用于java网站、桌面程序的文件上传,图片上传以及压缩处理。本文中需要用到commons-net-2.2.jar thumbnailator-0.4.8.jar,请大家自行下载。
- package com.hengyi.ftpdemo;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.SocketException;
- import org.apache.commons.net.ftp.FTPClient;
- import org.apache.commons.net.ftp.FTPReply;
- import net.coobird.thumbnailator.Thumbnails;
- /**
- * FTP工具类
- * @author 繁华
- */
- public class FTPUtils {
- private static FTPUtils instance = null;
- private static FTPClient ftpClient = null;
- private String cache_dir = "e:/cache/";//用于压缩图片
- private String server = "192.168.1.13";
- private int port = 21;
- private String userName = "ZW-13";
- private String userPassword = "123";
- public static FTPUtils getInstance(){
- if(instance == null){
- instance = new FTPUtils();
- }
- ftpClient = new FTPClient();
- return instance;
- }
- /**
- * 连接FTP服务器
- * @return
- */
- private boolean connect(){
- boolean stat = false;
- try {
- if(ftpClient.isConnected())
- return true;
- ftpClient.connect(server, port);
- stat = true;
- } catch (SocketException e) {
- stat = false;
- e.printStackTrace();
- } catch (IOException e) {
- stat = false;
- e.printStackTrace();
- }
- return stat;
- }
- /**
- * 打开FTP服务器
- * @return
- */
- public boolean open(){
- if(!connect()){
- return false;
- }
- boolean stat = false;
- try {
- stat = ftpClient.login(userName, userPassword);
- // 检测连接是否成功
- int reply = ftpClient.getReplyCode();
- if (!FTPReply.isPositiveCompletion(reply)) {
- close();
- stat = false;
- }
- } catch (IOException e) {
- stat = false;
- }
- return stat;
- }
- /**
- * 关闭FTP服务器
- */
- public void close(){
- try {
- if(ftpClient != null){
- if(ftpClient.isConnected()){
- ftpClient.logout();
- ftpClient.disconnect();
- }
- ftpClient = null;
- }
- } catch (IOException e) {
- }
- }
- /**
- * 上传文件到FTP服务器
- * @param filename
- * @param path
- * @param input
- * @return
- */
- public boolean upload(String filename,String path,InputStream input){
- boolean stat = false;
- try {
- cd(path);
- ftpClient.setBufferSize(1024);
- ftpClient.setControlEncoding("GBK");
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
- stat = ftpClient.storeFile(filename, input);
- input.close(); //关闭输入流
- } catch (IOException e) {
- }
- return stat;
- }
- /**
- * 上传文件到FTP服务器
- * @param filename
- * @param path
- * @param input
- * @return
- */
- public boolean upload(String filename,String path,String filepath){
- boolean stat = false;
- try {
- cd(path);
- ftpClient.setBufferSize(1024);
- ftpClient.setControlEncoding("GBK");
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
- FileInputStream input = new FileInputStream(new File(filepath));
- stat = ftpClient.storeFile(filename, input);
- input.close(); //关闭输入流
- } catch (IOException e) {
- }
- return stat;
- }
- /**
- * 上传文件
- * @param filename
- * @param path
- * @param file
- * @return
- */
- public boolean upload(String filename,String path,File file){
- boolean stat = false;
- try {
- cd(path);
- ftpClient.setBufferSize(1024);
- ftpClient.setControlEncoding("GBK");
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
- FileInputStream input = new FileInputStream(file);
- stat = ftpClient.storeFile(filename,input);
- input.close(); //关闭输入流
- } catch (IOException e) {
- }
- return stat;
- }
- /**
- * 上传图片自动压缩处理
- * @param path
- * @param filename
- * @param input
- * @param quality
- * @param maxWidth
- * @param maxHeight
- * @return
- */
- public boolean uploadImage(String path,String filename,InputStream input,float quality,int maxWidth,int maxHeight){
- boolean stat = false;
- try {
- String suffex = filename.substring(filename.lastIndexOf(".")+1, filename.length());
- System.out.println(suffex);
- File imagePath = new File(cache_dir + filename);
- Thumbnails.of(input).outputQuality(quality).size(maxWidth,maxHeight).toFile(imagePath);
- input.close();
- if(!imagePath.exists()){
- return false;
- }
- cd(path);
- ftpClient.setBufferSize(1024);
- ftpClient.setControlEncoding("GBK");
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
- FileInputStream input2 = new FileInputStream(imagePath);
- stat = ftpClient.storeFile(filename,input2);
- input2.close();//关闭输入流
- imagePath.delete();
- stat = true;
- } catch (IOException e) {
- e.printStackTrace();
- stat = false;
- }
- return stat;
- }
- /**
- * 循环切换目录
- * @param dir
- * @return
- */
- public boolean cd(String dir){
- boolean stat = true;
- try {
- String[] dirs = dir.split("/");
- if(dirs.length == 0){
- return ftpClient.changeWorkingDirectory(dir);
- }
- stat = ftpClient.changeToParentDirectory();
- for(String dirss : dirs){
- stat = stat && ftpClient.changeWorkingDirectory(dirss);
- }
- stat = true;
- } catch (IOException e) {
- stat = false;
- }
- return stat;
- }
- /***
- * 创建目录
- * @param dir
- * @return
- */
- public boolean mkdir(String dir){
- boolean stat = false;
- try {
- ftpClient.changeToParentDirectory();
- ftpClient.makeDirectory(dir);
- stat = true;
- } catch (IOException e) {
- stat = false;
- }
- return stat;
- }
- /***
- * 创建多个层级目录
- * @param dir dong/zzz/ddd/ewv
- * @return
- */
- public boolean mkdirs(String dir){
- String[] dirs = dir.split("/");
- if(dirs.length == 0){
- return false;
- }
- boolean stat = false;
- try {
- ftpClient.changeToParentDirectory();
- for(String dirss : dirs){
- ftpClient.makeDirectory(dirss);
- ftpClient.changeWorkingDirectory(dirss);
- }
- ftpClient.changeToParentDirectory();
- stat = true;
- } catch (IOException e) {
- stat = false;
- }
- return stat;
- }
- /**
- * 删除文件夹
- * @param pathname
- * @return
- */
- public boolean rmdir(String pathname){
- try{
- return ftpClient.removeDirectory(pathname);
- }catch(Exception e){
- return false;
- }
- }
- /**
- * 删除文件
- * @param pathname
- * @return
- */
- public boolean remove(String pathname){
- boolean stat = false;
- try{
- stat = ftpClient.deleteFile(pathname);
- }catch(Exception e){
- stat = false;
- }
- return stat;
- }
- /**
- * 移动文件或文件夹
- * @param pathname1
- * @param pathname2
- * @return
- */
- public boolean rename(String pathname1,String pathname2){
- try {
- return ftpClient.rename(pathname1, pathname2);
- } catch (IOException e) {
- e.printStackTrace();
- return false;
- }
- }
- }
自己整理的
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class FTPUtils {
private static FTPUtils instance = null;
private static FTPClient ftpClient = null;
private String cache_dir = "e:/cache/";//用于压缩图片
private String server = "10.250.196.142";
private int port = 21;
private String userName = "admin";
private String userPassword = "123456";
public static FTPUtils getInstance(){
if(instance == null){
instance = new FTPUtils();
}
ftpClient = new FTPClient();
return instance;
}
/**
* 连接FTP服务器
* @return
*/
private boolean connect(){
boolean stat = false;
try {
if(ftpClient.isConnected())
return true;
ftpClient.connect(server, port);
stat = true;
} catch (SocketException e) {
stat = false;
e.printStackTrace();
} catch (IOException e) {
stat = false;
e.printStackTrace();
}
return stat;
}
/**
* 打开FTP服务器
* @return
*/
public boolean open(){
if(!connect()){
return false;
}
boolean stat = false;
try {
stat = ftpClient.login(userName, userPassword);
// 检测连接是否成功
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
close();
stat = false;
}
} catch (IOException e) {
stat = false;
}
return stat;
}
/**
* 关闭FTP服务器
*/
public void close(){
try {
if(ftpClient != null){
if(ftpClient.isConnected()){
ftpClient.logout();
ftpClient.disconnect();
}
ftpClient = null;
}
} catch (IOException e) {
}
}
/**
* 上传文件到FTP服务器
* @param filename
* @param path
* @param input
* @return
*/
public boolean upload(String filename,String path,InputStream input){
boolean stat = false;
try {
cd(path);
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
stat = ftpClient.storeFile(filename, input);
input.close(); //关闭输入流
} catch (IOException e) {
}
return stat;
}
/**
* 上传文件到FTP服务器
* @param filename
* @param path
* @param input
* @return
*/
public boolean upload(String filename,String path,String filepath){
boolean stat = false;
try {
// cd(path);
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
FileInputStream input = new FileInputStream(new File(filepath));
stat = ftpClient.storeFile(filename, input);
input.close(); //关闭输入流
} catch (IOException e) {
}
return stat;
}
/**
* 上传文件
* @param filename
* @param path
* @param file
* @return
*/
public boolean upload(String filename,String path,File file){
boolean stat = false;
try {
cd(path);
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
FileInputStream input = new FileInputStream(file);
stat = ftpClient.storeFile(filename,input);
input.close(); //关闭输入流
} catch (IOException e) {
}
return stat;
}
public static void main(String[] args) {
try {
FTPUtils ftpUtil = getInstance();
ftpUtil.connect();
ftpUtil.open();
FTPFile[] files = ftpClient.listFiles("2/3");
System.out.println(files.length);
FTPFile[] files1 = ftpClient.listFiles("eeee");
System.out.println(files1.length);
ftpUtil.close();
/* FTPUtils ftpUtil = getInstance();
ftpUtil.connect();
ftpUtil.open();
ftpUtil.mkdirs("1/2/3/4");
ftpUtil.close();
ftpUtil = getInstance();
ftpUtil.connect();
ftpUtil.open();
ftpUtil.upload("1/2/3/4/1.log", "", "d:/web.log");
ftpUtil.close();*/
/*
FTPUtils ftpUtil = getInstance();
ftpUtil.connect();
ftpUtil.open();
ftpUtil.mkdirs("2/3/4");
ftpUtil.upload("1.log", "2/3/4", "d:/web.log");
ftpUtil.close();*/
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/**
* 上传图片自动压缩处理
* @param path
* @param filename
* @param input
* @param quality
* @param maxWidth
* @param maxHeight
* @return
*/
/* public boolean uploadImage(String path,String filename,InputStream input,float quality,int maxWidth,int maxHeight){
boolean stat = false;
try {
String suffex = filename.substring(filename.lastIndexOf(".")+1, filename.length());
System.out.println(suffex);
File imagePath = new File(cache_dir + filename);
Thumbnails.of(input).outputQuality(quality).size(maxWidth,maxHeight).toFile(imagePath);
input.close();
if(!imagePath.exists()){
return false;
}
cd(path);
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
FileInputStream input2 = new FileInputStream(imagePath);
stat = ftpClient.storeFile(filename,input2);
input2.close();//关闭输入流
imagePath.delete();
stat = true;
} catch (IOException e) {
e.printStackTrace();
stat = false;
}
return stat;
}
*/
/**
* 循环切换目录
* @param dir
* @return
*/
public boolean cd(String dir){
boolean stat = true;
try {
String[] dirs = dir.split("/");
if(dirs.length == 0){
return ftpClient.changeWorkingDirectory(dir);
}
stat = ftpClient.changeToParentDirectory();
for(String dirss : dirs){
stat = stat && ftpClient.changeWorkingDirectory(dirss);
}
stat = true;
} catch (IOException e) {
stat = false;
}
return stat;
}
/***
* 创建目录
* @param dir
* @return
*/
public boolean mkdir(String dir){
boolean stat = false;
try {
ftpClient.changeToParentDirectory();
ftpClient.makeDirectory(dir);
stat = true;
} catch (IOException e) {
stat = false;
}
return stat;
}
/***
* 创建多个层级目录
* @param dir dong/zzz/ddd/ewv
* @return
*/
public boolean mkdirs(String dir){
String[] dirs = dir.split("/");
if(dirs.length == 0){
return false;
}
boolean stat = false;
try {
ftpClient.changeToParentDirectory();
for(String dirss : dirs){
ftpClient.makeDirectory(dirss);
ftpClient.changeWorkingDirectory(dirss);
}
ftpClient.changeToParentDirectory();
stat = true;
} catch (IOException e) {
stat = false;
}
return stat;
}
/**
* 删除文件夹
* @param pathname
* @return
*/
public boolean rmdir(String pathname){
try{
return ftpClient.removeDirectory(pathname);
}catch(Exception e){
return false;
}
}
/**
* 删除文件
* @param pathname
* @return
*/
public boolean remove(String pathname){
boolean stat = false;
try{
stat = ftpClient.deleteFile(pathname);
}catch(Exception e){
stat = false;
}
return stat;
}
/**
* 移动文件或文件夹
* @param pathname1
* @param pathname2
* @return
*/
public boolean rename(String pathname1,String pathname2){
try {
return ftpClient.rename(pathname1, pathname2);
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
}
0
貌似之前我的认识有点问题……
FTP协议里面,规定文件名编码为iso-8859-1,所以只能建转码以后的目录