一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - Java遠程連接Linux服務器并執行命令及上傳文件功能

Java遠程連接Linux服務器并執行命令及上傳文件功能

2021-05-05 11:44StaticKing Java教程

這篇文章主要介紹了Java遠程連接Linux服務器并執行命令及上傳文件功能,本文是小編整理的代碼筆記,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

 最近再開發中遇到需要將文件上傳到linux服務器上,至此整理代碼筆記。

此種連接方法中有考慮到并發問題,在進行創建ftp連接的時候將每一個連接對象存放至

threadlocal<ftp> 中以確保每個線程之間對ftp的打開與關閉互不影響。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
package com.test.utils;
import java.io.bufferedinputstream;
import java.io.file;
import java.io.filefilter;
import java.io.fileinputstream;
import java.io.inputstream;
import java.util.arraylist;
import java.util.date;
import java.util.list;
import org.apache.commons.logging.log;
import org.apache.commons.logging.logfactory;
import com.jcraft.jsch.channelsftp;
import com.jcraft.jsch.jsch;
import com.jcraft.jsch.session;
public class ftp {
  //打印log日志
  private static final log logger = logfactory.getlog(ftp.class);
  private static date last_push_date = null;
  private session sshsession;
  private channelsftp channel;
  private static threadlocal<ftp> sftplocal = new threadlocal<ftp>();
  private ftp(string host, int port, string username, string password) throws exception {
    jsch jsch = new jsch();
    jsch.getsession(username, host, port);
    //根據用戶名,密碼,端口號獲取session
    sshsession = jsch.getsession(username, host, port);
    sshsession.setpassword(password);
    //修改服務器/etc/ssh/sshd_config 中 gssapiauthentication的值yes為no,解決用戶不能遠程登錄
    sshsession.setconfig("userauth.gssapi-with-mic", "no");
    //為session對象設置properties,第一次訪問服務器時不用輸入yes
    sshsession.setconfig("stricthostkeychecking", "no");
    sshsession.connect();
    //獲取sftp通道
    channel = (channelsftp)sshsession.openchannel("sftp");
    channel.connect();
    logger.info("連接ftp成功!" + sshsession);
  }
  /**
   * 是否已連接
   *
   * @return
   */
  private boolean isconnected() {
    return null != channel && channel.isconnected();
  }
  /**
   * 獲取本地線程存儲的sftp客戶端
   *
   * @return
   * @throws exception
   */
  public static ftp getsftputil(string host, int port, string username, string password) throws exception {
    //獲取本地線程
    ftp sftputil = sftplocal.get();
    if (null == sftputil || !sftputil.isconnected()) {
      //將新連接防止本地線程,實現并發處理
      sftplocal.set(new ftp(host, port, username, password));
    }
    return sftplocal.get();
  }
  /**
   * 釋放本地線程存儲的sftp客戶端
   */
  public static void release() {
    if (null != sftplocal.get()) {
      sftplocal.get().closechannel();
      logger.info("關閉連接" + sftplocal.get().sshsession);
      sftplocal.set(null);
    }
  }
  /**
   * 關閉通道
   *
   * @throws exception
   */
  public void closechannel() {
    if (null != channel) {
      try {
        channel.disconnect();
      } catch (exception e) {
        logger.error("關閉sftp通道發生異常:", e);
      }
    }
    if (null != sshsession) {
      try {
        sshsession.disconnect();
      } catch (exception e) {
        logger.error("sftp關閉 session異常:", e);
      }
    }
  }
  /**
   * @param directory 上傳ftp的目錄
   * @param uploadfile 本地文件目錄
   *
   */
  public void upload(string directory, string uploadfile) throws exception {
    try {<br>    //執行列表展示ls 命令
    channel.ls(directory);<br>    //執行盤符切換cd 命令
    channel.cd(directory);
    list<file> files = getfiles(uploadfile, new arraylist<file>());
    for (int i = 0; i < files.size(); i++) {
      file file = files.get(i);
      inputstream input = new bufferedinputstream(new fileinputstream(file));
      channel.put(input, file.getname());
      try {
        if (input != null) input.close();
      } catch (exception e) {
        e.printstacktrace();
        logger.error(file.getname() + "關閉文件時.....異常!" + e.getmessage());
      }
      if (file.exists()) {
        boolean b = file.delete();
        logger.info(file.getname() + "文件上傳完畢!刪除標識:" + b);
      }
    }
    }catch (exception e) {
      logger.error("【子目錄創建中】:",e);
            //創建子目錄
      channel.mkdir(directory);
    }
  }
  //獲取文件
  public list<file> getfiles(string realpath, list<file> files) {
    file realfile = new file(realpath);
    if (realfile.isdirectory()) {
      file[] subfiles = realfile.listfiles(new filefilter() {
        @override
        public boolean accept(file file) {
          if (null == last_push_date ) {
            return true;
          } else {
            long modifydate = file.lastmodified();
            return modifydate > last_push_date.gettime();
          }
        }
      });
      for (file file : subfiles) {
        if (file.isdirectory()) {
          getfiles(file.getabsolutepath(), files);
        } else {
          files.add(file);
        }
        if (null == last_push_date) {
          last_push_date = new date(file.lastmodified());
        } else {
          long modifydate = file.lastmodified();
          if (modifydate > last_push_date.gettime()) {
            last_push_date = new date(modifydate);
          }
        }
      }
    }
    return files;
  }
}

總結

以上所述是小編給大家介紹的java遠程連接linux服務器并執行命令及上傳文件,希望對大家有所幫助如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

原文鏈接:https://www.cnblogs.com/staticking/p/9082648.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产综合久久 | 99爱爱| 无删减影视免费观看 | 极品ts赵恩静和直男激战啪啪 | 久久久久综合 | 亚洲情欲网| 日本人护士免费xxxx视频 | miaa076深田咏美在线 | 成人精品福利 | 日本阿v精品视频在线观看 日本xxx片免费高清在线 | 亚洲欧美一级夜夜爽w | 亚洲国产精品久久无套麻豆 | 国产福利一区二区三区 | 亚洲精品tv久久久久久久久久 | 亚洲狠狠婷婷综合久久久久网站 | 香蕉久久久久久狠狠色 | 亚洲高清在线视频 | 公妇仑乱在线观看 | 国产精品一区二区久久不卡 | 性做久久久久久 | 高h辣文小说网 烧书阁 | 四虎在线网址 | 亚洲视频在线观看不卡 | 小柔的性放荡羞辱日记 | 18性夜影院午夜寂寞影院免费 | 果冻传媒天美传媒网址入口 | 欧美四级无删版影片 | 日韩欧美在线一区二区三区 | 日本免费不卡在线一区二区三区 | 欧美人xxxxxbbbb| 四色6677最新永久网站 | 国产高清视频网站 | 日韩在线一区二区三区免费视频 | 免费欧美日韩 | 青青网站| 操美女网址| 日本三级s级在线播放 | 欧美福利在线播放 | 国产精品久久久久久久久齐齐 | 三上悠亚精品专区久久 | 欧美交换乱理伦片120秒 |