1. java 伺服器與客戶端的文件傳輸
可以直接通過流的形式上傳或者下載。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
import hkrt.b2b.view.util.Log;
import java.util.Vector;
import zn.ccfccb.util.CCFCCBUtil;
/**
*/
public class CCFCCBSftp {
/**
* 連接sftp伺服器
*
* @return
*/
public static ChannelSftp connect() {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jsch.getSession(CCFCCBUtil.CCFCCBHOSTNAME, CCFCCBUtil.CCFCCBHOSTNAME, 22);
Session sshSession = jsch.getSession(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBHOSTNAME, 22);
System.out.println("Session created.");
sshSession.setPassword(CCFCCBUtil.CCFCCBLOGINPASSWORD);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
System.out.println("Session connected.");
System.out.println("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
System.out.println("Connected to " + CCFCCBUtil.CCFCCBHOSTNAME + ".");
} catch (Exception e) {
}
return sftp;
}
/**
* 連接sftp伺服器
*
* @param host 主機
* @param port 埠
* @param username 用戶名
* @param password 密碼
* @return
*/
public static ChannelSftp connect(String host, int port, String username,
String password) {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jsch.getSession(CCFCCBUtil.CCFCCBHOSTNAME, CCFCCBUtil.CCFCCBHOSTNAME, 22);
Session sshSession = jsch.getSession(CCFCCBUtil.CCFCCBLOGINNAME, host, port);
System.out.println("Session created.");
sshSession.setPassword(CCFCCBUtil.CCFCCBLOGINPASSWORD);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
System.out.println("Session connected.");
System.out.println("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
System.out.println("Connected to " + host + ".");
} catch (Exception e) {
}
return sftp;
}
/**
* 上傳文件
*
* @param directory 上傳的目錄
* @param uploadFile 要上傳的文件
* @param sftp
*/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file = new File(uploadFile);
sftp.put(new FileInputStream(file), file.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下載文件
*
* @param directory 下載目錄
* @param downloadFile 下載的文件
* @param saveFile 存在本地的路徑
* @param sftp
* @return
*/
public static String download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file = new File(saveFile);
FileOutputStream fos = new FileOutputStream(file);
sftp.get(downloadFile, fos);
sftp.disconnect();
fos.close();
} catch (Exception e) {
Log.info("下載文件過程出錯:" + e.getMessage());
return "false";
}
return "true";
}
/**
* 刪除文件
*
* @param directory 要刪除文件所在目錄
* @param deleteFile 要刪除的文件
* @param sftp
*/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
sftp.rm(deleteFile);
} catch (Exception e) {
}
}
/**
* 列出目錄下的文件
*
* @param directory 要列出的目錄
* @param sftp
* @return
* @throws SftpException
*/
public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException {
return sftp.ls(directory);
}
public static void main(String[] args) {
CCFCCBSftp sf = new CCFCCBSftp();
String host = CCFCCBUtil.CCFCCBHOSTNAME;
int port = 22;
String username = CCFCCBUtil.CCFCCBLOGINNAME;
String password = CCFCCBUtil.CCFCCBLOGINPASSWORD;
String directory = "/ccfccb/904999900099/download/";
//String uploadFile = "D:\\tmp\\upload.txt";
String downloadFile = "CCF_904999900099_20150317_0001.zip";
String saveFile = CCFCCBUtil.CCFCCBUploadFilePath + "//" + "CCF_904999900099_20150317_0001.zip";
//String deleteFile = "delete.txt";
ChannelSftp sftp = CCFCCBSftp.connect(host, port, username, password);
//sf.upload(directory, uploadFile, sftp);
CCFCCBSftp.download(directory, downloadFile, saveFile, sftp);
//sf.delete(directory, deleteFile, sftp);
try {
sftp.cd(directory);
// sftp.mkdir("ss");
System.out.println("finished");
} catch (Exception e) {
}
}
}
2. win2003系統下 FreeFileSync v8.1 如何通過sftp將需要備份的文件上傳到ftp伺服器進行備份。
默認的sublime text是沒有這個sftp連接功能的,這只是一個文本編輯器,相當於windows下的txt,所以要先裝上插件:
安裝Sublime Text 2插件的方法:
1.直接安裝
安裝Sublime text 2插件很方便http://www.uuudown.com/,可以直接下載安裝包解壓縮到Packages目錄
(菜單->preferences->packages)。
2.使用Package Control組件安裝,下載這個方法要先安裝Package Control,我就是用這個方法安裝的。
先安裝package control組件,然後直接在線安裝。
1) 按Ctrl+`調出console, 粘貼以下代碼到底部命令行並回車:
import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp) if not os.path.exists(ipp) else None;open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())
2)重啟Sublime Text 2。
如果在Perferences->package settings中看到package control這一項,則安裝成功。
3)用Package Control安裝插件的方法:
按下Ctrl+Shift+P調出命令面板
輸入install選擇下面提示的 Install Package選項並回車,然後輸入SFTP,下拉列表中會出現一些相關的插件,選中sftp進行安裝就行了,裝好後還需配置如下:選菜單欄中的File->SFTP/FTP->Set up Server,然後出現一個配置窗口如下,
連接成功的話會有在sublime的底部如下顯示,這樣鏈接成功了。。。
按下Ctrl+Shift+P調出命令面板
選中sftp進行安裝就行了,裝好後還需配置如下:
選菜單欄中的File->SFTP/FTP->Set up Server,然後出現一個配置窗口如下,
注意是ftp連接的話,要將sftp改成ftp,然後設置主機名,密碼,埠就行了,ftp的埠是21。
連接成功的話會有在sublime的底部如下顯示,這樣鏈接成功了。。。
下面介紹將一個項目上傳:
在工具欄中點擊Project - Add Folder to Project...,選擇項目的文件夾。這樣左側會出現project文件夾,右鍵project,選擇FTPSync - Setup FTPSync in this folder,之後會出來一個配置文件sftp-config.json,對配置文件進行修改,代碼如下:
[php] view plain
{
// The tab key will cycle through the settings when first created
// Visit http://wbond.net/sublime_packages/sftp/settings for help
// sftp, ftp or ftps
"type": "ftp",
"save_before_upload": true,
"upload_on_save": false,
"sync_down_on_open": false,
"sync_skip_deletes": false,
"confirm_downloads": false,
"confirm_sync": true,
"confirm_overwrite_newer": false,
"host": "wangshangyou.com",
"user": "",
"password": "",
//"port": "22",
"remote_path": "/",
"ignore_regexes": [
"\\.sublime-(project|workspace)", "sftp-config(-alt\\d?)?\\.json",
"sftp-settings\\.json", "/venv/", "\\.svn", "\\.hg", "\\.git",
"\\.bzr", "_darcs", "CVS", "\\.DS_Store", "Thumbs\\.db", "desktop\\.ini"
],
//"file_permissions": "664",
//"dir_permissions": "775",
//"extra_list_connections": 0,
"connect_timeout": 30,
//"keepalive": 120,
//"ftp_passive_mode": true,
//"ssh_key_file": "~/.ssh/id_rsa",
//"sftp_flags": ["-F", "/path/to/ssh_config"],
//"preserve_modification_times": false,
//"remote_time_offset_in_hours": 0,
//"remote_encoding": "utf-8",
//"remote_locale": "C",
}
在project目錄結構中選擇文件右鍵上傳,或者在命令輸入框中輸入命令。
這樣就完成了。
主要快捷鍵列表:
Ctrl+L 選擇整行(按住-繼續選擇下行)
Ctrl+KK 從游標處刪除至行尾
Ctrl+Shift+K 刪除整行
Ctrl+Shift+D 復制游標所在整行,插入在該行之前
Ctrl+J 合並行(已選擇需要合並的多行時)
Ctrl+KU 改為大寫
Ctrl+KL 改為小寫
Ctrl+D 選詞 (按住-繼續選擇下個相同的字元串)
Ctrl+M 游標移動至括弧內開始或結束的位置
Ctrl+Shift+M 選擇括弧內的內容(按住-繼續選擇父括弧)
Ctrl+/ 注釋整行(如已選擇內容,同「Ctrl+Shift+/」效果)
Ctrl+Shift+/ 注釋已選擇內容
Ctrl+Z 撤銷
Ctrl+Y 恢復撤銷
Ctrl+M 游標跳至對應的括弧
Alt+. 閉合當前標簽
Ctrl+Shift+A 選擇游標位置父標簽對兒
Ctrl+Shift+[ 折疊代碼
Ctrl+Shift+] 展開代碼
Ctrl+KT 折疊屬性
Ctrl+K0 展開所有
Ctrl+U 軟撤銷
Ctrl+T 詞互換
Tab 縮進 自動完成
Shift+Tab 去除縮進
Ctrl+Shift+↑ 與上行互換
Ctrl+Shift+↓ 與下行互換
Ctrl+K Backspace 從游標處刪除至行首
Ctrl+Enter 游標後插入行
Ctrl+Shift+Enter 游標前插入行
Ctrl+F2 設置書簽
F2 下一個書簽
Shift+F2 上一個書簽
3. java 實現sftp上傳文件 都有哪些方式
JSch支持三種文件傳輸模式:
OVERWRITE 完全覆蓋模式,這是JSch的默認文件傳輸模式,即如果目標文件已經存在,傳輸的文件將完全覆蓋目標文件,產生新的文件。
RESUME
恢復模式,如果文件已經傳輸一部分,這時由於網路或其他任何原因導致文件傳輸中斷,如果下一次傳輸相同的文件,
則會從上一次中斷的地方續傳。
APPEND 追加模式,如果目標文件已存在,傳輸的文件將在目標文件後追加。
4. java ftp 和 sftp的區別
FTP是文件傳輸協議。在網站上,如果你想把文件和人共享,最便捷的方式莫過於把文件上傳到FTP伺服器上,其他人通過FTP客戶端程序來下載所需要的文件。 FTP進行文件傳輸需要通過埠進行。一般所需埠為: 1. 控制鏈路—TCP埠21。控制器端。用於發送指令給伺服器以及等待伺服器響應。 2. 數據鏈路---TCP埠20。數據傳輸埠。用來建立數據傳輸通道的。主要用來從客戶向伺服器發送一個文件、從伺服器向客戶發送一個文件、從伺服器向客戶發送文件或目錄列表。 FTP為了適應不同的網路環境,支持主動連接和被動連接兩種模式。這兩種模式都主要針對數據鏈路進行的,跟控制鏈路無關。 FTP的安全隱患: 一、FTP伺服器軟體漏洞。 二、明文口令。 三、FTP旗標。 四、通過FTP伺服器進行埠掃描。 五、數據劫持。 FTP的安全策略: 一、使用較比安全的系統和FTP服務軟體。 二、使用密文傳輸用戶名和口令。 三、更改服務軟體的旗標。 四、加強協議安全性。 SFTP是Secure File Transfer Protocol的縮寫,是安全文件傳送協議。可以為傳輸文件提供一種安全的加密方法。跟ftp幾乎語法功能一樣。 SFTP是SSH的一部分,是一種傳輸檔案至Blogger伺服器的安全方式。它...
5. 請問有java上傳文件到ftp伺服器的demo嗎,感激不盡
/**
* 依賴commons-net-3.4.jar, commons-io-2.4.jar
*/
public class FtpUtils {
/**
* 上傳
* @param host FTP地址
* @param port 埠ftp默認22,sftp默認23
* @param user ftp用戶名
* @param pwd ftp密碼
* @param destPath FTP文件保存路徑
* @param fileName ftp保存文件名稱
* @param file 需要上傳的文件
*/
public static void upload(String host, int port,String user, String pwd, String destPath, String fileName, File file){
FTPClient ftp = null;
InputStream fis = null;
try {
//1.建立連接
ftp = new FTPClient();
ftp.connect(host, port);
//2.驗證連接地址
int reply = ftp.getReplyCode();
if(FTPReply.isPositiveCompletion(reply)){
ftp.disconnect();
return;
}
//3.登錄
ftp.login(user, pwd);
//設置上傳路徑、緩存、字元集、文件類型等
ftp.changeWorkingDirectory(destPath);
ftp.setBufferSize(1024);
ftp.setControlEncoding("UTF-8");
ftp.setFileType(FTP.BINARY_FILE_TYPE);
//4.上傳
fis = new FileInputStream(file);
ftp.storeFile(fileName, fis);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
IOUtils.closeQuietly(fis);
try {
if(ftp.isAvailable()){
ftp.logout();
}
if(ftp.isConnected()){
ftp.disconnect();
}
//刪除上傳臨時文件
if(null != file && file.exists()){
file.delete();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
6. sftp如何與普通ftp互傳文件,用FlashFXP
基於SSH的交互方式貌似只能採用諸如SSH
Secure
File
Transfer
Client這樣的客戶端以指定ACCOUNT連接和下載上傳。如果想使用諸如FlashFXP等標準的FTP客戶端交互訪問的話得單獨安裝FTP
Server端程序。
7. 如何使用 SFTP 安全地傳輸文件
1.常用登陸方式:
格式:sftp <user>@<host>
通過sftp連接<host>,埠為默認的22,指定用戶<user>。
2.查看sftp支持的命令
使用help命令,查看支持的命令,如:
sftp>help
(其中命令前面有「l」表示本地執行,其他表示在所登錄的遠程主機上面執行)
3.基本的使用
sftp主要是用來傳輸文件的,包括上傳文件(從本機到遠程主機) ,下載文件(從遠程主機到本機)。
(1)文件下載
get [-Ppr] remote [local]
如:get test.cpp ./Project/
將遠程當前目錄下的文件test.cpp下載到本地當前目錄的Project文件夾中。
(2)文件上傳
put [-Ppr] local [remote]
如:put /home/liu/Software/RHEL_5.5\ x86_64.iso /home/xudong/Blog/
將本地/home/liu/Software/目錄下的ios文件傳送到遠程登陸主機的/home/xudong/Blog/目錄下。
(3)其他命令
可以使用命令還是有幾個的,如ls、lls;cd、lcd;pwd、lpwd等。具體查看help輸出吧。
8. java zip怎麼上傳到sftp上
使用SSH協議進行FTP傳輸的協議叫SFTP 換言之你的SSH協議一定啟用了,那麼使用基本linux命令在遠端執行即可。 我個人而言,JSCH一般是這樣用的:SFTP用於單純的文件上傳,之後直接使用基礎ssh協議執行遠端linux命令
9. java向SFTP伺服器上傳文件,如何判斷伺服器上的文件夾是否存在
如果你的JAVA部署的tomcat,就是你要查找文件的伺服器,那就用:
File file = new File("文件路徑")。
如果你本地的JAVA想要訪問遠程的一個伺服器的文件是否存在,就得用如下方法:
URL url = new URL(「文件路徑:可以是本地伺服器的路徑,也可以是遠程伺服器的路徑」)
HttpURLConnection urlcon = (HttpURLConnection) url.openConnection();
//message = urlcon.getHeaderField(0);
//文件存在『HTTP/1.1 200 OK』 文件不存在 『HTTP/1.1 404 Not Found』
Long TotalSize=Long.parseLong(urlcon.getHeaderField("Content-Length"));
if (TotalSize>0){
return true;
}else{
return false;
}
10. JAVA_JSCH如何遠程操作SFTP伺服器上的文件
使用SSH協議進行FTP傳輸的協議叫SFTP
換言之你的SSH協議一定啟用了,那麼使用基本linux命令在遠端執行即可。
我個人而言,JSCH一般是這樣用的:SFTP用於單純的文件上傳,之後直接使用基礎ssh協議執行遠端linux命令(比如說,移動文件或是重啟伺服器等等)
至於API的具體使用方式,稍微搜索一下很容易找到,比如這個:
http://blog.csdn.net/allen_zhao_2012/article/details/7941631