1. 要件
FTP はファイル サーバーとして機能し、サービス プロバイダーはリモート接続アドレス、接続ポート、アカウント番号、パスワードなどの情報を提供します。 。
上記の情報に基づいてクライアント接続を確立し、確立された接続上でファイルの読み取り、ファイルのアップロードなどの操作を実行できます
2. 依存関係
<!-- FTP相关操作的依赖 --> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.9.0</version> </dependency> <!-- IO工具类的依赖 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> <!-- lombok依赖 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.26</version> <scope>provided</scope> </dependency>
3. キーソース コード
3.0 構成情報
ftp: config: host: ${env.ftp.config.host:10.1.1.1} port: ${env.ftp.config.port:12345} username: ${env.ftp.config.username:ftpUsername} password: ${env.ftp.config.password:ftpPwd} remote-dir-path: ${env.ftp.config.remote-dir-path:/}
/** * @author: Vainycos * @description ftp配置信息 * @date: 2023/4/17 15:16 */ @Data @Component @ConfigurationProperties("ftp.config") public class FtpConfig { private String host; private int port; private String username; private String password; /** 初始读取根目录,当前默认/ */ private String remoteDirPath; }
3.1 クライアントを取得します
/** * 获取ftp客户端 * @return */ public FTPClient getFtpClient(){ try { FTPClient ftpClient = new FTPClient(); ftpClient.connect(ftpConfig.getHost() ,ftpConfig.getPort()); // 10分钟连接时间 ftpClient.setConnectTimeout(600000); ftpClient.setDefaultTimeout(600000); ftpClient.login(ftpConfig.getUsername() ,ftpConfig.getPassword()); // login后设置传输的模式 ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // login后设置被动模式 ftpClient.enterLocalPassiveMode(); // login后设置编码 String LOCAL_CHARSET = "GBK"; // 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK). if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) { LOCAL_CHARSET = "UTF-8"; } ftpClient.setControlEncoding(LOCAL_CHARSET); if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { log.error("未连接到FTP,用户名或密码错误!"); ftpClient.disconnect(); } else { log.info("FTP连接成功!"); } // 切换从某个根目录下开始扫描 ftpClient.changeWorkingDirectory(ftpConfig.getRemoteDirPath()); return ftpClient; }catch (IOException e) { log.error("ftp建立连接异常->{}", e); } return null; }
3.2 FTP ファイルを取得します
/** * 获取对应目录下的第一级目录文件 * @param ftpClient client * @throws IOException */ public void getFtpFirstDirectoryFiles(FTPClient ftpClient) throws IOException { log.info("ftpclient当前工作目录->{}", ftpClient.printWorkingDirectory()); if (ftpClient != null) { FTPFile[] files = ftpClient.listFiles(); for (FTPFile file : files) { String fileName = file.getName(); if (file.isDirectory()){ // 每次从根目录下查找第一级目录 String firstDirectory = ftpConfig.getRemoteDirPath() + "/" + fileName; ftpClient.changeWorkingDirectory(firstDirectory); log.info("当前目录->{}, 开始扫描录音文件", firstDirectory); // 切换目录后直接遍历第一级的文件,不递归第二级目录 dealFile(ftpClient); log.info("{}->目录扫描结束", firstDirectory); } } } } /** * 处理目录下的文件 * @param ftpClient * @throws IOException */ public void dealFile(FTPClient ftpClient) throws IOException { FTPFile[] files = ftpClient.listFiles(); for (FTPFile file : files) { String fileName = file.getName(); if (file.isDirectory()) { log.info("{}->为目录,跳过", fileName); continue; } String rootWorkingDirectory = ftpClient.printWorkingDirectory(); log.info("获取到文件->{}, 开始获取ftp文件流, ftpclient工作目录->{}", fileName, ftpClient.printWorkingDirectory()); // 开始获取ftp文件流 InputStream inputStream = ftpClient.retrieveFileStream(new String(fileName.getBytes("UTF-8"), FTP.DEFAULT_CONTROL_ENCODING)); if (inputStream == null){ log.error("文件不存在->{}", fileName); return; } byte[] data = IOUtils.toByteArray(inputStream); inputStream.close(); // 关键代码,如果不执行该代码,后续的ftpClient操作将会不生效 ftpClient.completePendingCommand(); // 省略...获取到了inputStream 文件流进行后续处理 } }
3.3 FTP サービス接続を閉じます
リーリー以上がJava で FTP ファイルを読み取って転送する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

MyBatisフレームワークを研究するとき、開発者はしばしば注釈に関するさまざまな問題に遭遇します。よくある質問の1つは、@resulttypeアノテーションを正しく使用する方法です...

自然言語処理技術を使用して人事データを最新の企業に照会する方法は、人事データの管理とQueryが一般的な要件です。私たちが...

Springboot Projectのデータベースアクセスパフォーマンスの問題マルチデータソース構成この記事は、Springboot ProjectでMulti-Dataソース構成にAtomikosを使用することを目指しています...

Javaプロジェクトを実行可能なJARファイルにパッケージ化すると、noclassdeffounderrorの問題に遭遇します。多くのJava開発者は...

プログラミングの世界でのIntellijideaのクラッキングの分析方法に関して、Intellij ...

問題の紹介:改善されたビデオ品質は、特に低解像度ビデオの処理、Java言語の使用方法など、ビデオ処理の重要な部分です。

スプリングブートアプリケーションの処理では、リクエストパラメーターを正しく受信する方法の問題に遭遇することがよくあります。特にパラメーター形式が一般的なJSONではない場合、もっと...

JavaプログラミングのJavaで並行ハッシュマップを宣言するときに静的を追加することの影響、Concurrenthashmap ...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール
