English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
この記事では、Apacheツールセットcommonsの使用方法について紹介します-netが提供するftpツールは、ftpサーバーにファイルのアップロードとダウンロードを実行するために使用されます。
一、準備
commonsを参照する必要があります-net-3.5.jarパッケージ。
mavenでインポート:
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.5</version> </dependency>
手動ダウンロード:
https://ja.oldtoolbag.com/softs/550085.html
二、FTP Serverへの接続
/** * FTP Serverに接続 * @throws IOException */ public static final String ANONYMOUS_USER="anonymous"; private FTPClient connect(){ FTPClient client = new FTPClient(); try{ //FTP Serverに接続 client.connect(this.host, this.port); //ログイン if(this.user==null||"".equals(this.user)){ //匿名ログインを使用 client.login(ANONYMOUS_USER, ANONYMOUS_USER); } else{ client.login(this.user, this.password); } //ファイル形式を設定 client.setFileType(FTPClient.BINARY_FILE_TYPE); //FTP Serverの応答を取得 int reply = client.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ client.disconnect(); return null; } //作業ディレクトリを切り替え changeWorkingDirectory(client); System.out.println("===FTPに接続しました:"+host+:"+port); } catch(IOException e){ return null; } return client; } /** * 作業ディレクトリを切り替え、リモートディレクトリが存在しない場合、ディレクトリを作成します。 * @param client * @throws IOException */ private void changeWorkingDirectory(FTPClient client) throws IOException{ if(this.ftpPath!=null&&!"".equals(this.ftpPath)){ Boolean ok = client.changeWorkingDirectory(this.ftpPath); if(!ok){ // StringTokenizer token = new StringTokenizer(this.ftpPath,"\\//"); while(token.hasMoreTokens()){ String path = token.nextToken(); client.makeDirectory(path); client.changeWorkingDirectory(path); } } } } /** * FTP接続を切断 * @param ftpClient * @throws IOException */ public void close(FTPClient ftpClient) throws IOException{ if(ftpClient!=null && ftpClient.isConnected()){ ftpClient.logout(); ftpClient.disconnect(); } System.out.println("!!!FTP接続を切断:"+host+:"+port); }
host:FTPサーバーのIPアドレス
port:FTPサーバーのポート番号
user:ログインユーザー
password:ログインパスワード
ログインユーザーが空の場合、匿名ユーザーでログインします。
ftpPath:FTPパス、FTPパスが存在しない場合、自動的に作成されます。階層構造が複数ある場合、ディレクトリの作成が必要です。
3. ファイルのアップロード
/** * ファイルのアップロード * @param targetName FTPにアップロードするファイル名 * @param localFile ローカルファイルパス * @return */ public Boolean upload(String targetName,String localFile){ //ftp serverに接続 FTPClient ftpClient = connect(); if(ftpClient==null){ System.out.println("FTPサーバーに接続["+host+:"+port+"]失敗!"); return false; } File file = new File(localFile); //アップロード後のファイル名を設定 if(targetName==null||"".equals(targetName)) targetName = file.getName(); FileInputStream fis = null; try{ long now = System.currentTimeMillis(); //ファイルアップロード開始 fis = new FileInputStream(file); System.out.println(">>>ファイルアップロード開始:"+file.getName()); Boolean ok = ftpClient.storeFile(targetName, fis); if(ok){ //アップロード成功 long times = System.currentTimeMillis(); - now; System.out.println(String.format(">>>アップロード成功:サイズ:%s,アップロード時間:%d秒", formatSize(file.length()),times/1000)); } else//アップロード失敗 System.out.println(String.format(">>>アップロード失敗:サイズ:%s", formatSize(file.length()))); } catch(IOException e){ System.err.println(String.format(">>>アップロード失敗:サイズ:%s", formatSize(file.length()))); e.printStackTrace(); return false; } finally{ try{ if(fis!=null) fis.close(); ftpClientを閉じます; } catch(Exception e){ } } return true; }
四、ファイルのダウンロード
/** * ファイルのダウンロード * @param localPath ローカル保存パス * @return */ public int download(String localPath){ // ftp serverに接続 FTPClient ftpClient = connect(); if(ftpClient==null){ System.out.println("FTPサーバーに接続["+host+:"+port+"]失敗!"); return 0; } File dir = new File(localPath); if(!dir.exists()) dir.mkdirs(); FTPFile[] ftpFiles = null; try{ ftpFiles = ftpClient.listFiles(); if(ftpFiles==null||ftpFiles.length==0) return 0; } catch(IOException e){ return 0; } int c = 0; for (int i=0;i<ftpFiles.length;i++ FileOutputStream fos = null; try{ String name = ftpFiles[i].getName(); fos = new FileOutputStream(new File(dir.getAbsolutePath()+File.separator+name)); System.out.println("<<<ファイルのダウンロードを開始します:"+name); long now = System.currentTimeMillis(); Boolean ok = ftpClient.retrieveFile(new String(name.getBytes("UTF-8"),"ISO-8859-1"), fos); if(ok){ //ダウンロード成功 long times = System.currentTimeMillis(); - now; System.out.println(String.format("<<<ダウンロード成功:サイズ:%s,アップロード時間:%d秒", formatSize(ftpFiles[i].getSize()),times/1000)); c++; } else{ System.out.println("<<<ダウンロード失敗"); } } catch(IOException e){ System.err.println("<<<ダウンロード失敗"); e.printStackTrace(); } finally{ try{ if(fos!=null) fosを閉じます; ftpClientを閉じます; } catch(Exception e){ } } } return c; }
ファイルサイズをフォーマット
private static final DecimalFormat DF = new DecimalFormat("#.##"); /** * ファイルサイズ(B、KB、MB、GB)をフォーマット * @param size * @return */ private String formatSize(long size){ 1024 " KB"; + return size }1024*1024 " KB";/1024 + else if(size< }1024*1024*1024 return (size/(1024*1024)) + " MB"; double gb = size/(1024*1024*1024 return DF.format(gb)+" GB"; } }
五、テスト
192.168.1.1021,null,null,"/temp/2016/12"); ftp.upload("newFile.rar", "D:",/ftp/TeamViewerPortable.rar"); System.out.println(""); ftp.download("D:",/ftp/"); }
結果
===FTPに接続します:192.168.1.10:21 >>>ファイルのアップロードを開始します:TeamViewerPortable.rar >>>アップロード成功:サイズ:5 MB、アップロード時間:3秒 !!!FTP接続を切断:192.168.1.10:21 ===FTPに接続します:192.168.1.10:21 <<<ファイルのダウンロードを開始します:newFile.rar <<<ダウンロード成功:サイズ:5 MB、アップロード時間:4秒 !!!FTP接続を切断:192.168.1.10:21
まとめ
これで、本文で紹介したjavaがApacheツールセットを使用してFTPファイル転送を実現するコードの詳細がすべてです。皆様に役立つことを願っています。興味がある場合は、このサイトの他の関連するトピックもご覧ください。不十分な点があれば、コメントをお待ちしております。皆様のサポートに感謝します。
声明:この記事の内容はインターネットから取得され、著作権者に帰属します。インターネットユーザーが自発的に貢献し、アップロードした内容であり、このサイトは所有権を持ちません。また、人工的な編集は行われていません。著作権侵害を疑う内容がある場合は、以下のメールアドレスにご連絡ください:notice#oldtoolbag.com(メール送信時、#を@に変更してください)で通報し、関連する証拠を提供してください。確認がとれた場合は、このサイトは即座に侵害を疑う内容を削除します。