激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费午夜视频 | 国产流白浆高潮在线观看 | 成人免费毛片在线观看 | 亚洲第五色综合网 | 午夜精品久久久久久中宇 | 国产一国产精品一级毛片 | 午夜视频久久 | 精品亚洲夜色av98在线观看 | 免费观看黄色片视频 | 免费看黄色一级片 | 久久免费视频一区二区三区 | 国产成人精品一区二区仙踪林 | av电影免费观看 | 黄色成人短视频 | 狠狠操视频网站 | 久久亚洲网| 成年免费视频黄网站在线观看 | 免费黄色小网站 | 成人黄色短视频在线观看 | 亚洲一区播放 | 成人在线第一页 | 日韩黄色成人 | 毛片免费一区二区三区 | 在线亚洲综合 | 91成人一区 | 色人阁五月天 | 污污短视频 | v片在线看 | 欧美一级黄带 | 久久精品亚洲精品国产欧美kt∨ | 色妹子久久 | 伊人99re| 国产亚洲欧美日韩在线观看不卡 | 成人毛片一区 | 国产不卡av在线 | 日本爽快片100色毛片视频 | 国产精品视频导航 | 99久久久精品免费观看国产 | 成人在线观看一区二区三区 | 白天操夜夜操 | 欧美成人精品一区二区三区 |