序文
最近、プロジェクトでFTPサーバーと対話する必要があります。インターネットでFTPのアップロードとダウンロードに関するツールクラスを見つけました。およそ2つのタイプがあります。
1つ目はシングルトンパターンクラスです。
2番目のタイプは、別のサービスを定義することです。これは、サービスを通じてFTPのアップロードとダウンロードを直接実装します。
これらの感情は両方とも長所と短所を持っています。
最初のものはコードの再利用を実装しますが、構成情報はクラスに記述する必要があります。これは維持するのがより複雑です。
2番目のタイプはスプリングフレームワークで、構成情報はプロパティファイルを介して動的に挿入できますが、コードを再利用することはできません。
そこで、上記の2つの利点を統合するために、自分でツールクラスを実装する予定です。ちなみに、アップロードプロセス中のいくつかの一般的な問題も解決されました。
スプリングフレームワークを使用しているため、ツールクラスがスプリングマネジメントのBeanとして宣言されている場合、デフォルトではシングルトンであるため、Singletonを再度実装する必要はありません。そして、それは豆であるため、プロパティファイルのプロパティを豆のプロパティに挿入して切り離すことができます。以下は特定のコードです。
パッケージcom.cky.util; Import java.io.file; Import java.io.fileoutputStream; Import java.io.ioException; Import java.io.inputStream; Import java.OutputStream; Import org.apache.commons.net.ftp.ftp; Import.commons.net.net.net.net.net.net.net.net.net org.apache.commons.net.ftpfile; import org.apache.commons.net.ftppreply; import org.springframework.beans.factory.annotation.value; Import org.springframework.stereototy.component ;/ @value( "$ {ftp.host}")プライベート文字列ホストのインジェクション。 // ftp server ip @value( "$ {ftp.port}")private int port; // ftp server port @value( "$ {ftp.username}")private string username; // username @value( "$ {ftp.password}")プライベート文字列パスワード; //パスワード@value( "$ {ftp.basepath}")プライベート文字列ベースパスcodeの背後にある主な方法/*public ftputil(){//system.out.println(this.toString()); host = "192.168.100.77";ポート= 21; username = "ftpuser";パスワード= "ftp54321"; basepath = "/home/ftpuser/"; }*// **** @paramパスファイルをサーバーにアップロードするパス* @param filenameファイル名* @param入力ストリーム* @return*/ public boolean fileupload(string path、inputstream input){ftpclient ftp = new ftpclient(); try {ftp.connect(host、port); ftp.login(ユーザー名、パスワード); //ファイルをエンコードフォーマットFTP.SetControlENCODING( "UTF-8"); // FTP通信には2つのモードがありますこの期間中、サーバーは21 // PASV(パッシブモード)クライアントなど、開く1つのポートのみを使用します。クライアントはサーバーにPASVコマンドを送信し、サーバーは新しいポートを開き(> 1024)、クライアントのポート21 //を使用して、制御できないクライアント、ファイアウォールなどのためにデータを送信します。 ftp.enterlocalpassivemode(); //送信モードをストリームモードに設定しますftp.setfiletransfermode(ftp.stream_transfer_mode); //ステータスコードを取得して接続が成功するかどうかを判断します(!ftpreply.ispositiveCompletion(ftp.getReplyCode()))){throw new runtimeException( "ftpサーバーは接続を拒否します"); } //アップロードされたファイルのルートディレクトリに移動しますif(!ftp.changeworkingdirectory(basepath)){throw new runtimeexception( "ルートディレクトリは存在しない、作成する必要があります"); } //ディレクトリが存在するかどうかを判断します。 //(string dir:dirs)のディレクトリを作成{if(null == dir || ""。equals(dir))継続; //ディレクトリが存在するかどうかを判断します(!ftp.changeworkingdirectory(dir)){// if(!ftp.makedirectory(dir)){throw new runtimeexception( "sub -directory creation failed"); } //新しく作成されたディレクトリftp.changeworkingdirectory(dir)を入力します。 }} //アップロードされたファイルタイプをバイナリタイプFTP.SETFILETYPE(ftp.binary_file_type)に設定します。 //ファイルをアップロードif(!ftp.storefile(filename、input)){return false; } input.close(); ftp.logout(); trueを返します。 }} catch(Exception e){throw new runtimeException(e); }最後に{if(ftp.isconnected()){try {ftp.disconnect(); } catch(ioexception e){new new runtimeexception(e); }}} falseを返します。 } /** * * @param filename filename、note!ここのファイル名は、以下:/2015/06/04/aa.jpg * @param localpathストアなどのファイル名とパスです。 try {ftp.connect(host、port); ftp.login(ユーザー名、パスワード); //ファイルをエンコードフォーマットFTP.SetControlENCODING( "UTF-8"); // FTP通信の2つのモードがありますこの期間中、サーバーは21 // PASV(パッシブモード)クライアントなどの1つのポートのみを使用します。クライアントはサーバーにPASVコマンドを送信し、サーバーは新しいポートを開き(> 1024)、クライアントのポートでこのポートを使用し、サーバーがサーバーからポートを開く必要があるため、サーバーはポートを開く必要があります。 ftp.enterlocalpassivemode(); //送信モードをストリームモードに設定しますftp.setfiletransfermode(ftp.stream_transfer_mode); //ステータスコードを取得して接続が成功するかどうかを判断します(!ftpreply.ispositiveCompletion(ftp.getReplyCode()))){throw new runtimeException( "ftpサーバーは接続を拒否します"); } int index = filename.lastindexof( "/"); //ファイル文字列パスのパスを取得= filename.substring(0、index); //ファイル名を取得する文字列名= filename.substring(index+1); //ディレクトリが存在するかどうかを判断します(!ftp.changeworkingdirectory(basepath+path)){new runtimeException( "ファイルパスは存在しません:"+basepath+path); } //このディレクトリですべてのファイルを取得ftpfile [] files = ftp.listfiles(); for(ftpfile file:files){//ターゲットファイルがあるかどうかを判断//system.out.println("file name "+file.getName()+" --- "+name); if(file.getname()。equals(name)){//system.out.println("file fund "); //見つかった場合、ターゲットファイルをローカルファイルにコピーしますlocalfile = new file(localpath+"/"+file.getName()); outputStream out = new fileoutputStream(localfile); ftp.retrievefile(file.getname()、out); out.close(); }} ftp.logout(); trueを返します。 } catch(Exception e){新しいruntimeException(e); }最後に{if(ftp.isconnected()){try {ftp.disconnect(); } catch(ioexception e){new new runtimeexception(e); }}}}} // 2つの関数のいずれかが使用されている場合、もう1つはpublic static void main(string [] args)にコメントする必要があります テスト - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- e.printstacktrace(); }最後に{}*///ダウンロード テスト - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------特定の使用
ステップ1:プロパティファイルをロードするには、スプリングを構成します
ApplicationContext.xml
<コンテキスト:Property-PlaceHolder location = "ClassPath:*。プロパティ"/> ftp.propertiesftp.host = 192.168.100.7777777777777777777777777777777777777777777777777777
ステップ2:ツールクラスを豆として宣言します
XMLメソッド
<bean id = "ftputil"> <プロパティ名= "host" value = "$ {ftp.host}"> </property name = "port" value = "$ {ftp.port}"> </property> <property name = "username" value = "$ {ftp.username}" value = "$ {ftp.password}"> </property> <property name = "basepath" value = "$ {ftp.basepath}"> </property> </bean>注釈方法、コンポーネントスキャン
<コンテキスト:Component-Scanベースパッケージ= "com.cky.util"> </context:component-scan>
パート3:注入と使用
@autowired private ftputil ftputil;
要約します
上記は、編集者が導入したSpring FTPのアップロードおよびダウンロードツールの問題の要約です。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!