English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

javaでApacheツールセットを使用してFTPファイルの転送を実現するコードの詳細

この記事では、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(メール送信時、#を@に変更してください)で通報し、関連する証拠を提供してください。確認がとれた場合は、このサイトは即座に侵害を疑う内容を削除します。

基礎教程
おすすめ