91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Quartz石英調度實現ftp文件上傳

發布時間:2020-06-12 06:07:49 來源:網絡 閱讀:875 作者:101ttyy 欄目:開發技術

Quartz石英調度實現ftp文件上傳

實現一個每月1號00點01分自動生成的文件,通過ftp傳到另一臺主機上

1.先創建一個job任務類FtpUploadFileJobTask

import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
public class FtpUploadFileJobTask{
    private FTPClient ftpClient;
    
    /**
         * 實現任務的方法
         */
    public void execute() {
        
        String fileName = "xxx.avl";
        String username = "username";
        String password ="password";
        //目標主機IP
        String ip = "192.168.137.2";
        int port =21;
        //上傳到主機的文件路徑
        String remotepath="/xxxx/src/MHTOSTA/";
        try {
            //16進制01作為數據分隔符
            byte[] b1 = {0x01};
            String b1Str = new String(b1);
            StringBuffer sb = new StringBuffer();
            String titleStr = "用戶ID"+b1Str+"訂單生成時間"+b1Str+"月份"+b1Str+"代理商編碼"+b1Str+"推薦工號"+"\r\n";
            sb.append(titleStr);
            //內容追加省略。。。
            boolean connetFlag= getConnetFTP(ip, port, username, password, remotepath, fileName);
            if(connetFlag){
                //上傳數據文件
                uploadFile(remotepath, fileName, new ByteArrayInputStream((sb.toString()).getBytes("GBK")));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //關閉連接
            ftpLogOut();
        }
    }
    
    /**
     * ftp上傳文件
     * @param path
     * @param filename
     * @param input
     * @return
     */
    public boolean uploadFile(
            String path, // FTP服務器保存目錄
            String filename, // 上傳到FTP服務器上的文件名
            InputStream input // 輸入流
    ) {
        boolean isLogin = false;
        try {
            //創建目錄,轉移工作目錄至指定目錄下
            createDirs(path);
            isLogin = this.ftpClient.storeFile(filename, input);
            if (!isLogin) {
                this.ftpClient.disconnect();
                return isLogin;
            }
            isLogin = true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (input != null)
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
        return isLogin;
    }
    /**
     * ftp鏈接
     *
     * @param hostname
     * @param port
     * @param username
     * @param password
     * @param path
     * @param filename
     * @return
     */
    public boolean getConnetFTP(String hostname,// FTP服務器hostname
            int port,// FTP服務器端口
            String username, // FTP登錄賬號
            String password, // FTP登錄密碼
            String path, // FTP服務器保存目錄
            String filename // 上傳到FTP服務器上的文件名
    ) throws IOException{
        boolean isLogin = false;
        this.ftpClient = new FTPClient();
        int reply;
        if (port > 0) {
            this.ftpClient.connect(hostname, port);// 連接FTP服務器
        } else {
            this.ftpClient.connect(hostname);
        }
        // 如果采用默認端口,可以使用ftp.connect(ftp)的方式直接連接FTP服務器
        this.ftpClient.login(username, password);// 登錄
        // 檢驗是否連接成功
        reply = this.ftpClient.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply)) {
                System.out.println("ftp鏈接失敗>>>");
            this.ftpClient.disconnect();
            return isLogin;
        }
        //使用二進制保存方式,沒有設置在linux系統下換行“\r\n”不起作用
        this.ftpClient.setFileType(this.ftpClient.BINARY_FILE_TYPE);
        isLogin = true;
        return isLogin;
    }
    /**
     * @退出關閉服務器鏈接
     * */
    public void ftpLogOut() {
        if (null != this.ftpClient && this.ftpClient.isConnected()) {
            try {
                boolean reuslt = this.ftpClient.logout();// 退出FTP服務器
                if (reuslt) {
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(this.ftpClient.isConnected()){
                    try {
                        this.ftpClient.disconnect();// 關閉FTP服務器的連接
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    /**
     * 創建目錄
     * @param remoteUpLoadPath
     * @throws IOException
     */
    public void createDirs(String remoteUpLoadPath) throws IOException {
        String[]dirs = remoteUpLoadPath.split("/");
        //移動到linux系統的根目錄下,注:這段代碼在window系統上執行代碼會報錯。
        this.ftpClient.changeWorkingDirectory("/");
        for(String dir : dirs){
            this.ftpClient.mkd(dir);
            this.ftpClient.changeWorkingDirectory(dir);
        }
    }
}


這里僅是通過ftp在目標主機上生產文件,并把數據直接寫入生成的文件中。

如果需要在項目主機上先生成文件在通過ftp傳到目標主機上,則可以通過以下代碼實現:


先將數據寫入文件:

/**
     * 數據寫入到文件
     * @param content
     */
    public void writerFileDate(String content,String fileName,boolean writeflag){
        BufferedWriter bw = null;
        try {
            bw = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(fileName,writeflag)));
            bw.write(content);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                if(bw!=null){
                    bw.close();// 關閉輸出流
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
/**
     * 創建文件路徑,并獲取文件名
     * @return
     */
    public String getCreateFile(String path,String fileName){
        File file = new File(path+fileName);
        if(!file.exists()){//文件不存在
            file.getParentFile().mkdirs();//創建文件目錄
        }
        return path+fileName;
    }

調用寫入數據方法

//context:數據內容
this.writerFileDate(context, this.getCreateFile(localpath,fileName),false);

生成文件后,在通過ftp傳到目標主機,關鍵代碼如下:

     FileInputStream in=null;
            try {
                in = new FileInputStream(new File(localpath + fileName));
                boolean uploadflag=uploadFile(ip, port, username,
                        password, remotepath,
                        fileName, in);
                if(uploadflag){
                    System.out.println("ftp上傳文件成功>>>");
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

上傳方法:

public boolean uploadFile(String hostname,// FTP服務器hostname
            int port,// FTP服務器端口
            String username, // FTP登錄賬號
            String password, // FTP登錄密碼
            String path, // FTP服務器保存目錄
            String filename, // 上傳到FTP服務器上的文件名
            InputStream input // 輸入流
    ) {
        boolean isLogin = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            if (port > 0) {
                ftp.connect(hostname, port);// 連接FTP服務器
            } else {
                ftp.connect(hostname);//默認端口可以這樣鏈接
            }
            // 如果采用默認端口,可以使用ftp.connect(ftp)的方式直接連接FTP服務器
            ftp.login(username, password);// 登錄
            // 檢驗是否連接成功
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return isLogin;
            }
            System.out.println("ftp鏈接成>>>>>>>>>>>>");
//            FTPFile[] files = ftp.listFiles();
//            for (FTPFile file : files) {
//                file.isFile();
//                file.getName();
//                file.getTimestamp();
//            }
            //創建目錄,轉移工作目錄至指定目錄下
            ftp = createDirs(path,ftp);
//            //轉移工作目錄至指定目錄下
//            isLogin = ftp.changeWorkingDirectory(path);
//            log.info("pIsSuc:" + isLogin);
//            if (!isLogin) {
//                ftp.disconnect();
//                return isLogin;
//            }
            isLogin = ftp.storeFile(filename, input);
            if (!isLogin) {
                System.out.println("ftp上傳文件失敗:" + isLogin+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
                ftp.disconnect();
                return isLogin;
            }
            isLogin = true;
        } catch (FileNotFoundException e) {
        //后面代碼省略。。。。


2.在applicationContext.xml中配置定時任務的時間,關鍵代碼如下:

<!-- 定時生成報表文件 -->
   <bean id="ftpUploadFileJobTask" class="com.quartz.FtpUploadFileJobTask">
        <property name="testService">
            <ref bean="testService"/>
        </property>
    </bean>
    <bean id="ftpUploadFileJobBean"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="ftpUploadFileJobTask" />
        <property name="targetMethod" value="execute" />
    </bean>
    <bean id="ftpUploadFileQuartTime" class="org.springframework.scheduling.quartz.CronTriggerBean"
        lazy-init="false" autowire="no">
        <property name="jobDetail">
            <ref bean="ftpUploadFileJobBean" />
        </property>
        <!-- 0 1 0 1 * ?==0:秒,1:分,0:時,1:號,*:每個月,?星期幾 -->
        <property name="cronExpression" value="0 1 0 1 * ?" /> <!-- 每月的1號的00點01分執行-->
    </bean>
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
            <ref bean="ftpUploadFileQuartTime"/>
            </list>
        </property>
    </bean>









向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邵东县| 奉新县| 米林县| 静宁县| 班玛县| 沙坪坝区| 泰来县| 深泽县| 澄城县| 松江区| 三台县| 通道| 公主岭市| 开远市| 环江| 嵊州市| 社旗县| 民丰县| 宣城市| 万年县| 临邑县| 虞城县| 钟山县| 临洮县| 凭祥市| 光山县| 垦利县| 南京市| 紫云| 广元市| 岱山县| 朝阳市| 寻甸| 安塞县| 金寨县| 石泉县| 洛阳市| 广西| 莱州市| 仲巴县| 怀来县|