您的位置:首页 > 编程语言 > PHP开发

ftpUtil实现文件上传和下载

2013-12-13 15:50 567 查看
/**

* ftp上传,下载

*/

public class FtpUtil {

/**

* 上传到文件服务器的账号

*/

public static final String ACCOUNT = "";

/**

* 上传到文件服务器的密码

*/

public static final String PASSWORD = "";

/**

* 上传到文件服务器的的root

* 不能加/那样就不是在当前目录下找啦

*/

public static final String PATH_ROOT = "/ /**

* 上传到文件服务器的ip地址

*/

public static final String IP = "";

/**

* 判断需不需要上传到文件服务器

*/

public static final boolean isUploadOrDown = false;

private String ip = "";

private String username = "";

private String password = "";

private int port = -1;

private String path = "";

FtpClient ftpClient = null;

OutputStream os = null;

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服务器

*

*/

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进制上传、下载

return true;

} catch (IOException e) {

e.printStackTrace();

return false;

}

}

/**

* 断开与ftp服务器连接

*

*/

public boolean closeServer() {

try {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

if (ftpClient != null) {

ftpClient.closeServer();

}

return true;

} catch (IOException e) {

e.printStackTrace();

return false;

}

}

/**

* 检查文件夹在当前目录下是否存在

*/

public boolean isDirExist(String dir) {

String pwd = "";

try {

pwd = ftpClient.pwd();

ftpClient.cd(dir);

ftpClient.cd(pwd);

} catch (Exception e) {

return false;

}

return true;

}

/**

* * 删除FTP上的文件 *

*

* @param ftpDirAndFileName

*/

public boolean deleteFile(String ftpDirAndFileName) {

try{

ftpClient.sendServer("DELE " + ftpDirAndFileName + "\r\n");

return true;

}catch (Exception e){

e.printStackTrace();

return false;

}

}

/**

* * 删除FTP目录 *

*/

public boolean deleteDirectory(String ftpDirectory) {

try{

ftpClient.sendServer("XRMD " + ftpDirectory + "\r\n");

return true;

}catch (Exception e){

e.printStackTrace();

return false;

}

}

/**

* 在当前目录下创建文件夹

*/

public 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的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换

*/

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"),"utf-8");

File file_in = new File(fileName);// 打开本地待上传的文件

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();

}

}

}

/**

* 真正用于上传的方法

*/

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(fileName);// 打开本地待长传的文件

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;

}

/**

* 通过流直接上传文件

*/

public boolean upload(InputStream fins, String newname) throws Exception {

TelnetOutputStream os = null;

try {

os = ftpClient.put(newname);

System.out.println(newname);

if(fins == null){

return false;

}

byte[] bytes = new byte[1024];

int c;

while ((c = fins.read(bytes)) != -1) {

os.write(bytes, 0, c);

}

return true;

} catch (Exception e){

e.printStackTrace();

return false;

}finally {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

}

}

/**

*通过流 从ftp下载文件到本地

*

* @param filename

* 服务器上的文件名

*

* @return 输出流

* @throws Exception

*/

public InputStream download( String filename) {

TelnetInputStream is = null;

try {

is = ftpClient.get(filename);

return is;

} catch (IOException e) {

e.printStackTrace();

return null;

} finally {

}

}

/**

* 从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 boolean upLoadFileServer(String loadFileName,String ServFileName,String branchPath){

FtpUtil ftp = new FtpUtil(FtpUtil.IP, FtpUtil.ACCOUNT, FtpUtil.PASSWORD);

ftp.connectServer();

//目前创建一个文件夹

if(!("".equals(branchPath) || branchPath == null) && !ftp.isDirExist("vgop_attachment"+"/"+branchPath)){

ftp.createDir("vgop_attachment/"+branchPath);

}

String servFileFullName =("".equals(branchPath) || branchPath == null) ? FtpUtil.PATH_ROOT+"/"+ServFileName : FtpUtil.PATH_ROOT+"/"+branchPath+"/"+ServFileName;

boolean flag =
ftp.upload(loadFileName,servFileFullName);

// }

ftp.closeServer();

return flag;

}

/**

* 从文件服务器上下载到本地

*/

public static boolean downloadFileServer(String ServFileName,String loadFileName){

FtpUtil ftp = new FtpUtil(FtpUtil.IP, FtpUtil.ACCOUNT, FtpUtil.PASSWORD);

ftp.connectServer();

//下载的

Long result =
ftp.downloadFile(FtpUtil.PATH_ROOT+ServFileName, loadFileName);

// List list =
ftp.getFileList("/weblogic/test");

// for (int i = 0; i < list.size(); i++) {

// String name = list.get(i).toString();

// System.out.println(name);

// }

ftp.closeServer();

return true;

}

public static void main(String[] args) {

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: