EdtFtp 源码

来源:互联网 发布:类似mounty11的软件 编辑:程序博客网 时间:2024/06/03 11:27

 

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.StringTokenizer;

import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
import sun.net.ftp.FtpLoginException;

public class ftp  {

    FtpClient aftp;

    DataOutputStream outputs;

    TelnetInputStream ins;

    TelnetOutputStream outs;

    
int ch;

    
public String a;

    String hostname 
= "";

    
private String path = "/";

    
public static void main(String[] args) {
        String hostname 
= "133.133.133.34";
        
int port = 21;
        String uid 
= "olympic";
        String pwd 
= "olympic";
        String RWFileDir 
= "D:/temp/files";// 文件目录

        
// 连接ftp服务器
        ftp ft = new ftp();
        ft.connect(RWFileDir, hostname, port, uid, pwd);

        
// 下载文件
        if (ft.aftp != null{
            
try {
                ft.getNameList(RWFileDir);
            }
 catch (IOException e) {
                System.out.println(
"下载文件出错:" + e);
            }

        }


        
// 断开服务器连接
        ft.stop(RWFileDir);

    }


    
public FtpClient connect(String RWFileDir, String hostname, int port,
            String uid, String pwd) 
{
        
this.hostname = hostname;
        System.out.println(
"正在连接" + hostname + ",请等待.....");
        
try {
            aftp 
= new FtpClient(hostname, port);
            aftp.login(uid, pwd);
            aftp.binary();
            
// aftp.openPortDataConnection();
            a = "连接主机:" + hostname + "成功!";
            System.out.println(a);
        }
 catch (FtpLoginException e) {
            a 
= "登陆主机:" + hostname + "失败!请检查用户名或密码是否正确:" + e;
            System.out.println(a);
            
// return false;
        }
 catch (IOException e) {
            a 
= "连接主机:" + hostname + "失败!请检查端口是否正确:" + e;
            System.out.println(a);
            
// return false;
        }
 catch (SecurityException e) {
            a 
= "无权限与主机:" + hostname + "连接!请检查是否有访问权限:" + e;
            System.out.println(a);
            
// return false;
        }


        log(RWFileDir, a);
        
return aftp;
    }


    
public void stop(String RWFileDir) {
        String message 
= "";
        
try {
            
if (aftp != null{
                aftp.closeServer();
                message 
= "与主机" + hostname + "连接已断开!";
                System.out.println(message);
                log(RWFileDir, message);
            }

        }
 catch (IOException e) {
            message 
= "与主机" + hostname + "断开连接失败!" + e;
            System.out.println(message);
            log(RWFileDir, message);
        }

    }


    
public boolean downloadFile(String RWFileDir, String filepathname) {
        
boolean result = true;
        String message 
= "";
        
if (aftp != null{
            System.out.println(
"正在下载文件" + filepathname + ",请等待....");
            String badfile 
= filepathname.substring(filepathname.length() - 4,
                    filepathname.length());
            String badlog 
= filepathname.substring(filepathname.length() - 7,
                    filepathname.length());
            String baddir 
= "";
            
if ((badfile.compareTo(".bad"!= 0)
                    
&& (badlog.compareTo(".badlog"!= 0)) {
                baddir 
= "subunsubtosp/";
            }
 else {
                baddir 
= "bad/";
            }

            String strdir 
= "subunsubtosp/";
            
// System.out.println(RWFileDir + baddir + filepathname);
            try {
                
// FtpClient fc=new FtpClient("192.168.0.56",2121);
                
// fc.login("lee","lee");
                int ch;
                File fi 
= new File(RWFileDir + baddir + filepathname);
                
// aftp.cd(strdir);
                RandomAccessFile getFile = new RandomAccessFile(fi, "rw");
                getFile.seek(
0);
                TelnetInputStream fget 
= aftp.get(strdir + filepathname);
                DataInputStream puts 
= new DataInputStream(fget);
                
while ((ch = puts.read()) >= 0{
                    getFile.write(ch);

                }

                
// s.delete();

                fget.close();
                getFile.close();
                
// fc.closeServer();

                message 
= "下载" + filepathname + "文件到" + baddir + "目录成功!";
                System.out.println(message);
                log(RWFileDir, message);
            }
 catch (IOException e) {
                message 
= "下载" + filepathname + "文件到" + baddir + "目录失败!" + e;
                System.out.println(message);
                log(RWFileDir, message);
                result 
= false;

            }

        }
 else {
            result 
= false;
        }

        
return result;
    }


    
public boolean uploadFile(String RWFileDir, String filepathname) {
        
boolean result = true;
        String message 
= "";
        
if (aftp != null{
            System.out.println(
"正在上传文件" + filepathname + ",请等待....");

            
try {
                String fg 
= new String("/subunsubfromsp/");
                
int index = filepathname.lastIndexOf(fg);
                String filename 
= filepathname.substring(index + 1);
                File localFile 
= new File(filepathname);

                RandomAccessFile sendFile 
= new RandomAccessFile(filepathname,
                        
"r");
                
// 
                sendFile.seek(0);
                
// 改名上传temp_
                filename = filename.substring(015+ "temp_"
                        
+ filename.substring(15, filename.length());
                outs 
= aftp.put(filename);
                outputs 
= new DataOutputStream(outs);
                
while (sendFile.getFilePointer() < sendFile.length()) {
                    ch 
= sendFile.read();
                    outputs.write(ch);
                }


                rename(filename.substring(
15, filename.length()), filename
                        .substring(
20, filename.length()));
                outs.close();
                sendFile.close();

                message 
= "上传" + filepathname + "文件成功!";
                System.out.println(message);
                log(RWFileDir, message);
            }
 catch (IOException e) {
                message 
= "上传" + filepathname + "文件失败!" + e;
                System.out.println(message);
                log(RWFileDir, message);
                result 
= false;

            }

        }
 else {
            result 
= false;
        }

        
return result;
    }


    
public void rename(String oldName, String newName) {

        
// aftp.renameTo(oldName,newName);
        File Old = new File(oldName); // oldName
        File New = new File(newName); // newName
        
// aftp.renameTo(New);
        
// boolean Old.renameTo(File newName);
        
// System.out.println(Old);
        
// System.out.println(New);

    }


    
public static void deleFile(String RWFileDir) {
        
// try {
        
// 取得ReadFile目录下的txt文件
        String sdir = RWFileDir + "subunsubfromsp/";
        File fdir 
= new File(sdir);
        String FileName 
= "";
        
int j = fdir.list().length;

        System.out.println(sdir 
+ "目录下要删除的文件数:" + fdir.list().length);
        File file;
        
for (int i = 0; i < j; i++{
            
// 删除subunsubfromsp中的txt文件
            FileName = RWFileDir + "subunsubfromsp/" + (fdir.list())[0];
            file 
= new File(FileName);
            file.delete();
            System.out.println(
"已经成功删除" + FileName + "文件!");
        }

        
// }
        
// catch (IOException e) {
        
// System.out.println("删除txt文件错误!");
        
// e.printStackTrace();
        
// }
    }


    
public void showFileContents(String strdir) {
        StringBuffer buf 
= new StringBuffer();
        
try {
            aftp.cd(strdir);
            ins 
= aftp.list();
            
while ((ch = ins.read()) >= 0{
                buf.append((
char) ch);
            }


            System.out.println(buf.toString());

            ins.close();
        }
 catch (IOException e) {
        }

    }


    
// 返回当前目录的所有文件及文件夹

    
public ArrayList getFileList() throws IOException {
        BufferedReader dr 
= new BufferedReader(new InputStreamReader(aftp
                .list()));
        ArrayList al 
= new ArrayList();
        String s 
= "";
        
while ((s = dr.readLine()) != null{
            al.add(s);
        }

        
return al;
    }


    
public void setPath(String path) throws IOException {
        
if (aftp == null)
            
this.path = path;
        
else {
            aftp.cd(path);
        }

    }


    
// 返回当前目录的文件名称

    
public ArrayList getNameList(String RWFileDir) throws IOException {

        BufferedReader dr 
= new BufferedReader(new InputStreamReader(aftp
                .nameList(
"subunsubtosp/")));
        ArrayList al 
= new ArrayList();
        String s 
= "";
        
while ((s = dr.readLine()) != null{
            al.add(s);
            s 
= s.substring(13, s.length());
            isFile(s);
            downloadFile(RWFileDir, s);
            
// String strFileDelF = aftp.nameList("subunsubtosp/");
            File fileDelF = new File(s);
            fileDelF.delete();
        }

        
return al;
        
// System.out.println(al.add(s));
    }


    
// 判断一行文件信息是否为目录

    
public boolean isDir(String line) {
        
return ((String) parseLine(line).get(0)).indexOf("d"!= -1;
    }


    
public boolean isFile(String line) {
        
return !isDir(line);
    }


    
// 处理getFileList取得的行信息

    
private ArrayList parseLine(String line) {
        ArrayList s1 
= new ArrayList();
        StringTokenizer st 
= new StringTokenizer(line, " ");
        
while (st.hasMoreTokens()) {
            s1.add(st.nextToken());
        }

        
return s1;
    }


    
// 写消息日志
    public static void log(String RWFileDir, String msg) {
        String message 
= "";
        
try {
            java.text.DateFormat df 
= new java.text.SimpleDateFormat(
                    
"yyyy-MM-dd HH:mm:ss");
            java.text.DateFormat dflog 
= new java.text.SimpleDateFormat(
                    
"yyyyMMdd");
            java.util.Date date 
= new java.util.Date();
            String datestr 
= df.format(new java.util.Date());
            String datelog 
= dflog.format(new java.util.Date());
            
// String datelog = datestr.substring(0,10);
            
// datelog = datelog.replace('-',' ');

            
// 按日期每天生成一个日志文件
            FileWriter fwl = new FileWriter(RWFileDir + "CMSSftp" + datelog
                    
+ ".log"true);
            PrintWriter outl 
= new PrintWriter(fwl);
            outl.println(datestr 
+ "  " + msg);
            outl.close();
            fwl.close();
        }
 catch (IOException e) {
            message 
= "写log文件错误!" + e;
            e.printStackTrace();
            log(RWFileDir, message);
            System.out.println(message);
        }

    }


}

原创粉丝点击