導航:首頁 > 編程語言 > sftpjava實現

sftpjava實現

發布時間:2023-03-07 20:41:41

『壹』 java實現sftp功能,linux上可以,solaris異常

狀態集合I的a弧轉換,表示為move(I,a)定義為狀態集合J,其中J是所有那些可從I的某一狀態經過一條a弧而到達的狀態的全體。
定義Ia = ε-closure(move(I,a))

『貳』 java怎麼實現SFTP上傳文件夾,包括整個目錄

遍歷文件夾,挨個上傳

『叄』 用java實現sftp的客戶端,channel.connect()的時候,拋出異常,收到信息過長,然後就沒連上。怎麼回事

首先,不太明確你要問什麼?
J2EE是java企業級應用,它裡面關於安全方面的東西很多!
許可權管理?信息安全?授權服務?訪問控制?數據機密性?
要是你想全部都了解!
在這里提問是不行的!太龐雜了!
如果 你要問的是 java ftp傳輸過程中的一些安全注意事項!
這里建議 你使用 apache的開源項目。他們把基於java的ftp操作都封裝好了!
安全相關都有保證。
我下面可以給你復制一段 ftp下載遠程終端的java代碼!你可以參考一下!

需要下載 org.apache.commons.net包
可以到 網站下載!
/**
* Description: 從FTP伺服器下載文件
* @param ip FTP伺服器的ip地址
* @param port FTP伺服器埠,默認為:21
* @param username FTP登錄賬號
* @param password FTP登錄密碼
* @param remotePath FTP伺服器上的相對路徑
* @param fileName 要下載的文件名
* @param localPath 下載後保存到本地的路徑
* @return
*/
public static boolean downFile(String ip, int port,String username, String password, String remotePath,String fileName,String localPath,String localfile) {
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(ip, port);
//處理中文轉碼操作
ftp.setControlEncoding("GBK");

FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");

ftp.login(username, password);//登錄

reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}

ftp.changeWorkingDirectory(remotePath);//轉移到FTP伺服器目錄
FTPFile[] fs = ftp.listFiles();
for(int i = 0; i < fs.length; i++){
FTPFile ff = fs[i];
if(ff.getName().equals(fileName)){
String localfilename = localfile;//按規則設置文件名這里你要下載文件,可以自己定義下載之後的文件名
File localFile = new File(localPath+File.separator+localfilename);

OutputStream is = new FileOutputStream(localFile);
//此處retrieveFile的第一個參數由GBK轉為ISO-8859-1編碼。否則下載後的文件內容為空。
ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),"ISO-8859-1"), is);

is.close();
}
}
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}

『肆』 sftp免密用java怎麼調用

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Vector;

import org.apache.commons.lang.ArrayUtils;

import com.huawei.bme.commons.om.log.DebugLog;
import com.huawei.bme.commons.om.log.LogFactory;
import com.huawei.icity.commons.constants.KeyConstant;
import com.huawei.icity.commons.constants.NumberConstant;
import com.huawei.icity.commons.exception.SPMException;
import com.huawei.icity.commons.log.IcityLogFactory;
import com.huawei.icity.commons.log.IcityRuntimeLog;
import com.huawei.icity.commons.sysconfig.StaticInitData;
import com.huawei.icity.commons.utils.StringTools;
import com.huawei.icity.omp.common.util.CommonTools;
import com.huawei.icity.omp.interfaces.hint.constant.TimetaskConstants;
import com.huawei.mdmc.bfm.cms.assist.common.domain.SingleTableModel;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelSftp.LsEntry;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

/**
* SFTP公共處理類 〈提供SFTP文件上傳,下載,獲取指定目錄 下文件名集合, 獲取指定目錄 下文件集合等方法>
*
* @author mKF75022
* @version iCity Manager V100R002 2012-7-3
* @since iCity Manager V100R002C01
*/
public class SFTPTool
{
/**
* 調測日誌記錄器。
*/
private static final DebugLog DEBUGGER = LogFactory.getDebugLog(SFTPTool.class);

/**
* 運行日誌記錄器。
*/
private static final IcityRuntimeLog RUNTIMELOGGER = IcityLogFactory
.getRuntimeLog(SFTPTool.class);

/**
* Sftp客戶端對象
*/
private ChannelSftp sftp = null;

/**
* SFTP IP地址
*/
private String ip;

/**
* SFTP 埠
*/
private String port;

/**
* SFTP 用戶名
*/
private String userName;

/**
* SFTP 密碼
*/
private String password;

/**
* SFTP上傳模式:BINARY
*/
// private static final int BINARY_FILE_TYPE = 2;

/**
*
* 獲取實例
*
* @return SFTPTool newinstance實例
*
*/
public static SFTPTool getNewInstance()
{
return new SFTPTool();
}

/**
* 初始化連接參數
*
* @param sftpIP
* IP
* @param sftpPort
* 埠
* @param sftpUsername
* 用戶名
* @param sftpPassword
* 密碼
*/
public void init(String sftpIP, String sftpPort, String sftpUsername, String sftpPassword)
{
// 獲取SFTP連接信息
this.ip = sftpIP;
this.port = sftpPort;
this.userName = sftpUsername;
this.password = sftpPassword;
}

/**
* 從SFTP將符合約定命名的文件都下載到本地 .
*
* @param sftpDir
* SFTP伺服器文件存放路徑
* @param locDir
* 本地文件存放路徑
* @param regex
* 指定文件名的格式
* @param needBackup
* 是否需要文件備份(true:是;false:否)
* @param needFullMatch
* 是否要求全局匹配(true:是;false:否)
* @param deleteFtpFile
* the delete ftp file
* @return 下載到本地的文件列表
*/
public List<File> synSFTPFileToLocal(String sftpDir, String locDir, String regex,
boolean needBackup, boolean needFullMatch, boolean deleteFtpFile)
{
List<File> files = new ArrayList<File>(KeyConstant.INITIAL_NUMBER);
try
{
this.connect(ip, Integer.parseInt(this.port), userName, password);

// 獲得FTP上文件名稱列表
List<String> ftpFileNameList = this.listFiles(sftpDir, regex, needFullMatch);

File localFile = null;

int size = ftpFileNameList.size();

// 根據每個FTP文件名稱創建本地文件。
for (int i = 0; i < size; i++)
{
// 下載源文件
localFile = this.download(sftpDir, locDir, ftpFileNameList.get(i), deleteFtpFile);
if (localFile.exists())
{
files.add(localFile);
}
if (needBackup)
{
// 備份源文件生成默認備份文件路徑(據請求文件路徑,生成同級目錄的備份文件夾絕對路徑)
String parentDir = sftpDir.substring(NumberConstant.INT_0,
sftpDir.lastIndexOf("/") + 1);
String backupDir = parentDir + TimetaskConstants.DEFAULT_BACKUP_DIRNAME;
boolean bakExists = openDir(backupDir);
if (bakExists)
{
this.uploadFile(backupDir, localFile);
}
else
{
boolean parentExists = openDir(parentDir);
if (parentExists)
{
sftp.mkdir(TimetaskConstants.DEFAULT_BACKUP_DIRNAME);
this.uploadFile(backupDir, localFile);
}
else
{
DEBUGGER.error("sftp parentDir no exisits ");
}
}
}
}
}
catch (Exception e)
{
DEBUGGER.error("synSFTPFileToLocal Exception", e);
}
finally
{
this.disconnect();
}
return files;
}

/**
* 連接sftp伺服器
*
* @param sftpip
* ip地址
* @param sftpport
* 埠
* @param sftpusername
* 用戶名
* @param sftppassword
* 密碼
* @return channelSftp
* @throws SPMException
*/
public ChannelSftp connect(String sftpip, int sftpport, String sftpusername, String sftppassword)
{
sftp = new ChannelSftp();
try
{
JSch jsch = new JSch();
jsch.getSession(sftpusername, sftpip, sftpport);
Session sshSession = jsch.getSession(sftpusername, sftpip, sftpport);
RUNTIMELOGGER.info("Session created");
sshSession.setPassword(sftppassword);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
// 設置超時時間為
sshSession.setTimeout(Integer.parseInt(StaticInitData.getFtpConnectTimeOut())
* NumberConstant.INT_1000);
sshSession.connect();
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;

// 設置文件類型
// ftpClient.setFileType(BINARY_FILE_TYPE);

// 與防火牆相關
// ftpClient.enterLocalPassiveMode();
}
catch (JSchException e)
{
DEBUGGER.error("JSchException : {}", e);
}
return sftp;
}

// /**
// * 創建指定文件夾
// *
// * @param dirName
// * dirName
// */
// public void mkDir(String dirName)
// {
// try
// {
// sftp.mkdir(dirName);
// }
// catch (SftpException e)
// {
// DEBUGGER.error("mkDir Exception : " + e);
// }
// }

/**
* 創建指定文件夾
*
* @param dirName
* dirName
*/
public void mkDir(String dirName)
{
String[] dirs = dirName.split("/");
try
{
String now = sftp.pwd();
for (int i = 0; i < dirs.length; i++)
{
boolean dirExists = openDir(dirs[i]);
if (!dirExists)
{
sftp.mkdir(dirs[i]);
sftp.cd(dirs[i]);

}

}
sftp.cd(now);
}
catch (SftpException e)
{
DEBUGGER.error("mkDir Exception : " + e);
}
}

/**
* 打開指定目錄
*
* @param directory
* directory
* @return 是否打開目錄
*/
public boolean openDir(String directory)
{
try
{
sftp.cd(directory);
return true;
}
catch (SftpException e)
{
DEBUGGER.error("openDir Exception : " + e);
return false;
}
}

『伍』 java 實現sftp上傳文件 都有哪些方式

JSch支持三種文件傳輸模式:

OVERWRITE 完全覆蓋模式,這是JSch的默認文件傳輸模式,即如果目標文件已經存在,傳輸的文件將完全覆蓋目標文件,產生新的文件。
RESUME
恢復模式,如果文件已經傳輸一部分,這時由於網路或其他任何原因導致文件傳輸中斷,如果下一次傳輸相同的文件,

則會從上一次中斷的地方續傳。

APPEND 追加模式,如果目標文件已存在,傳輸的文件將在目標文件後追加。

『陸』 Java怎麼均衡訪問多台ftp伺服器

多次需要把文件上傳到單獨的伺服器,而程序是在單獨的伺服器上部署的,在進行文件操作的時候就需要跨伺服器進行操作包括:文件上傳、文件下載、文件刪除等。跨伺服器文件操作一般是需要FTP協議和SFTP協議兩種,現在就通過Java實現FTP協議的文件上傳。要實現FTP操作文件需要引入jar包: commons-net-1.4.1.jar

參考資料來源:網路貼吧

『柒』 java怎麼實現SFTP上傳文件夾,包括整個目錄

遍歷文件夾,挨個上傳

閱讀全文

與sftpjava實現相關的資料

熱點內容
不許宣讀命令 瀏覽:698
尋找信號源源碼 瀏覽:81
打電話老伺服器錯誤是什麼原因 瀏覽:491
三維溯源碼 瀏覽:716
android錄音開源 瀏覽:459
弗洛伊德演算法c 瀏覽:12
udp命令字 瀏覽:661
app服務端java源碼 瀏覽:798
電腦用文件夾玩大型游戲 瀏覽:254
安卓耳塞失靈怎麼辦 瀏覽:765
華三交換機保存命令 瀏覽:605
命令方塊怎麼調鍵盤 瀏覽:841
不把密碼存在伺服器上怎麼辦 瀏覽:398
怎麼讓指令方塊的命令消失 瀏覽:543
用單片機做plc 瀏覽:404
雲伺服器進入子目錄命令 瀏覽:795
伺服器機櫃如何配電 瀏覽:578
怎麼刪除iphone資源庫里的app 瀏覽:940
pdf魚 瀏覽:648
單片機pcf8591什麼作用 瀏覽:805