最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java連接FTP服務(wù)器圖文教程

 更新時間:2023年08月08日 10:24:49   作者:AndyWei147  
這篇文章主要給大家介紹了關(guān)于java連接FTP服務(wù)器的相關(guān)資料,Ftp是一種常見的文件存儲服務(wù)器,在很多的項目中都有使用,方便存儲各種格式的文件,使用java連接ftp文件服務(wù)器也是常用的工具類,需要的朋友可以參考下

這一期,我們來學(xué)習(xí)一下如何用Java連接FTP服務(wù)器。在工程項目中,我們往往需要連接FTP服務(wù)器。當(dāng)我們有此需求時,可以從兩個方面考慮。第一,根據(jù)FTP協(xié)議自己寫出一套程序,這是一種思路,當(dāng)然這是一件很費時又耗成本的一件事。我們是工程師,我們的目的是把需求實現(xiàn),而不是科研項目。所以得考慮另一種思路,去尋找已經(jīng)做好的API。好巧,剛好有一個開源組織為我們做好了這個API,那就是偉大的Apache。下面就開始時根據(jù)Apache給我們提供的API完成我們的需求。

第一步,下載jar包,登錄官網(wǎng)如下:

然后找到“Projects”點進去,出現(xiàn)下拉框。點擊“Project List”

找到Commons點進去

往下滑,找到“net”

點進去,然后在左上角找到“download”

點擊然后往下滑,找到如圖

其中Binaries是編譯后的jar,Source是源代碼。一般使用的是編譯后的jar,將其下載,下載之后就是新建項目導(dǎo)jar包。如何導(dǎo)jar,不會再這里說。此時,我們jar已經(jīng)準備好。我們還需要一個ftp服務(wù)器,如何建立ftp服務(wù)器也不會再這里說。

現(xiàn)在假設(shè)你已經(jīng)創(chuàng)建好項目,已經(jīng)建立好ftp服務(wù)器,下面就直接上代碼了。

package my;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class TestFTPClient
{
	// API里對中文FTP目錄的處理有點問題
	// 在調(diào)用 changeWorkingDirectory() / listFiles()等方法時,將參數(shù)路徑轉(zhuǎn)換一下
	public static String ftpPath(String path)
	{
		try
		{
			return new String(path.getBytes("UTF-8"), FTP.DEFAULT_CONTROL_ENCODING);
		} catch (UnsupportedEncodingException e)
		{
			return "";
		}
	}
	public static void main(String[] args) throws Exception
	{
		FTPClient ftp = new FTPClient();
		// 連接服務(wù)器
		ftp.connect("127.0.0.1", 21);
		int reply = ftp.getReplyCode();
		if (!FTPReply.isPositiveCompletion(reply))
		{
			ftp.disconnect();
			System.out.println("** 無法連接至FTP服務(wù)器!");
			System.exit(1);
		}
		if (!ftp.login("test", "123456"))
		{
			ftp.logout();
			System.out.println("** 錯誤的用戶名或密碼!");
			System.exit(1);
		}
		System.out.println("Connected.");
		// 字節(jié)傳輸 BINARY_FILE_TYPE
		// 文本傳輸 ASCII_FILE_TYPE
		// 一般使用BINARY模式來傳輸文件,很少使用 ASCII_FILE_TYPE
		ftp.setFileType(FTP.BINARY_FILE_TYPE);
		// 主動模式: enterLocalActiveMode()
		// 被動模式: enterLocalPassiveMode()
		// 一般選擇被動模式
		ftp.enterLocalPassiveMode();
		// 設(shè)置控制通道的字符集, 要與服務(wù)端的設(shè)定一致
		ftp.setControlEncoding("UTF-8");
		// 切換目錄 ( 用ftpPath() 轉(zhuǎn)換一下 )
		// boolean rc = ftp.changeWorkingDirectory(ftpPath("/圖片"));
		// if(!rc)
		// {
		// System.out.println("切換目錄出錯!");
		// }
		// ...
		//
		// 列出所有的文件/子目錄
		// listFile(ftp);
		//上傳一個文件
		//upload(ftp);
		// 下載一個文件
		download(ftp);
		ftp.logout();
		ftp.disconnect();
		System.out.println("Quit.");
	}
	public static void listFile(FTPClient ftp)
	{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println("> list");
		FTPFile[] ftpFiles;
		try
		{
			ftpFiles = ftp.listFiles();
			for (FTPFile f : ftpFiles)
			{
				String time = sdf.format(f.getTimestamp().getTime());
				String info = "";
				if (f.isDirectory())
					info = String.format("+ %-20s", f.getName());
				else
					info = String.format("  %-20s %8d   %s", f.getName(), f.getSize(), time);
				System.out.println(info);
			}
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	// 上傳一個文件
	public static void upload(FTPClient ftp)
	{
		File localFile = new File("E:\\代碼\\HBiuder.zip");
		InputStream inStream;
		OutputStream outStream;
		try
		{
			String remotePath = ftpPath(localFile.getName());
			inStream = new FileInputStream(localFile);
			//
			// 小文件直接 用
			// ftp.storeFile(remotePath, inStream);
			//大文件時用這個方法
			outStream = ftp.storeFileStream(remotePath);
			// 大文件,可以自己掌握進度
			byte[] buffer = new byte[4000];
			while (true)
			{
				int n = inStream.read(buffer);
				if (n <= 0)
					break;
				outStream.write(buffer, 0, n);
			}
			inStream.close();
			outStream.close();
		} catch (FileNotFoundException e1)
		{
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//文件下載
	public static void download(FTPClient ftp) throws Exception
	{
	       File localFile = new File("D:/tmp/copy.zip");
	        localFile.getParentFile().mkdirs();
	        // 
	        String remotePath = ftpPath("/HBiuder.zip");
	        OutputStream outStream = new FileOutputStream(localFile);
	        // 小文件直接 用 
	        // ftp.retrieveFile(remotePath, outStream);
	        // 大文件,可以自己掌握進度
	        InputStream inStream = ftp.retrieveFileStream(remotePath);
	        if(inStream == null)
	        	throw new Exception("遠程文件不存在!" + remotePath);
	        byte[] buffer = new byte[4000];
	        while(true)
	        {
	        	int n =inStream.read(buffer);
	        	if(n <= 0) break;
	        	outStream.write(buffer,0,n);
	        }
	        inStream.close();
	        outStream.close();
	}
}

 僅供參考,如有不足,多多指教。

到此這篇關(guān)于java連接FTP服務(wù)器的文章就介紹到這了,更多相關(guān)java連接FTP服務(wù)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何修改jar包中源碼的實現(xiàn)方法

    如何修改jar包中源碼的實現(xiàn)方法

    這篇文章主要介紹了如何通過重寫Java類方法和修改資源文件來改造第三方JAR包,并提供了一個詳細的步驟指南,包括準備工作、重寫類方法、修改資源文件、重新打包JAR以及驗證改造效果,需要的朋友可以參考下
    2025-05-05
  • 基于接口實現(xiàn)java動態(tài)代理示例

    基于接口實現(xiàn)java動態(tài)代理示例

    這篇文章主要介紹了基于接口實現(xiàn)java動態(tài)代理示例,需要的朋友可以參考下
    2014-04-04
  • Java實現(xiàn)動態(tài)獲取文件的絕對路徑

    Java實現(xiàn)動態(tài)獲取文件的絕對路徑

    我們知道在?Java?中讀取一些配置文件信息,是在開發(fā)中十分常用的要求。這篇文章就來和大家聊聊Java如何實現(xiàn)動態(tài)獲取文件的絕對路徑,感興趣的可以了解一下
    2023-02-02
  • Java8中創(chuàng)建Stream流的幾種常見方式

    Java8中創(chuàng)建Stream流的幾種常見方式

    在Java 8中,??Stream?? API 是一種新的處理數(shù)據(jù)的方式,它允許以聲明式的方式來處理數(shù)據(jù)集合,本文將詳細介紹在Java 8中創(chuàng)建 ??Stream?? 流的幾種常見方式,大家可以根據(jù)需要進行選擇
    2025-05-05
  • 詳解SpringCloudGateway內(nèi)存泄漏問題

    詳解SpringCloudGateway內(nèi)存泄漏問題

    這篇文章主要介紹了詳解SpringCloudGateway內(nèi)存泄漏問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java 圖表類庫詳解

    Java 圖表類庫詳解

    本文主要介紹了Java圖表類庫的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • java 一鍵部署 jar 包和 war 包

    java 一鍵部署 jar 包和 war 包

    這篇文章主要介紹了Java創(chuàng)建打包命令、創(chuàng)建啟動文件等功能實現(xiàn)Java一鍵部署 jar 包和 war 包,感興趣的下伙伴可以參考下文
    2021-09-09
  • MyBatis/mybatis-plus項目打印SQL的方法實現(xiàn)

    MyBatis/mybatis-plus項目打印SQL的方法實現(xiàn)

    SpringBoot項目中,經(jīng)常需要打印SQL語句及其參數(shù),本文就來介紹一下MyBatis/mybatis-plus項目打印SQL的方法實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • Java編程實現(xiàn)月食簡單代碼分享

    Java編程實現(xiàn)月食簡單代碼分享

    這篇文章主要介紹了Java編程實現(xiàn)月食簡單代碼分享,程序很簡單,喜歡的朋友可以拿過去玩玩。
    2017-11-11
  • 在idea中如何使用Typora編輯markdown文件

    在idea中如何使用Typora編輯markdown文件

    這篇文章主要介紹了在idea中如何使用Typora編輯markdown文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論

滦平县| 衢州市| 吴江市| 于田县| 溧阳市| 彭泽县| 剑河县| 嘉峪关市| 资源县| 晴隆县| 汤阴县| 海宁市| 渝北区| 泽州县| 公主岭市| 岑巩县| 泗阳县| 唐山市| 进贤县| 连平县| 谷城县| 邳州市| 马关县| 阿克| 家居| 洱源县| 泰顺县| 赣州市| 万荣县| 新平| 南通市| 永顺县| 磐安县| 杭锦旗| 喜德县| 尼勒克县| 嘉义县| 开鲁县| 正阳县| 徐汇区| 商洛市|