JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > FTP編  
メニュー
Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
  2002/02/03  田中宏和
FTP編
◆FTPとは?
FTPとはFile Transfer Protocolの略です。TCP/IPネットワークでファイルを転送するときに使用されるプロトコルです。
◆ここでの環境
OS Windows 2000
J2SE SDK 1.4.0
◆Java実行環境の構築
アプリケーション編を参考にしてJava実行環境を構築してください。
◆Javaソースコード
ここでは、FTPサーバーにファイルを転送する簡単なアプリケーションを作成したいと思います。
HelloWorldFTP.java(ここからダウンロード)
import java.io.*;
import java.net.*;

public class HelloWorldFTP {
  private static final int CTRLPORT  = 21; // ftpの制御用のポート
  private static Socket ctrlSocket; // 制御用ソケット
  private static PrintWriter ctrlOutput; // 制御出力用ストリーム
  private static BufferedReader ctrlInput; // 制御入力用ストリーム
  private static byte[] localHostAddress; // ローカルホストのアドレス

  public static void main(String[] args) {
    try {
      /** 設定してください **/
      String host = "192.168.1.1";
      String loginName = "testuser";
      String password = "password";
      String dirName = "/home/testuser";
      String fileName = "hello.zip";

      // 接続します
      ctrlSocket = new Socket(host, CTRLPORT);
      localHostAddress = ctrlSocket.getLocalAddress().getAddress();
      ctrlOutput = new PrintWriter(ctrlSocket.getOutputStream());
      ctrlInput = new 
        BufferedReader(new InputStreamReader(ctrlSocket.getInputStream()));
      // ユーザー認証します
      ctrlOutput.println("USER " + loginName);
      ctrlOutput.flush();
      ctrlOutput.println("PASS " + password);
      ctrlOutput.flush();
      // 指定したディレクトリに移動します
      ctrlOutput.println("CWD " + dirName);
      ctrlOutput.flush();
      // バイナリモードに設定します(アスキーモードの場合は'TYPE A')
      ctrlOutput.println("TYPE I");
      ctrlOutput.flush();
      // アップロードします
      FileInputStream fis = new FileInputStream(fileName);
      Socket dataSocket = dataConnection("STOR " + fileName);
      OutputStream outstr = dataSocket.getOutputStream();
      int n;
      byte[] buff = new byte[1024];
      while ((n = fis.read(buff)) > 0) {
        outstr.write(buff,0,n);
      }
      dataSocket.close();
      fis.close();

      // 接続を閉じます
      ctrlOutput.close();
      ctrlInput.close();
      ctrlSocket.close();
    }catch (Exception e) {
      e.printStackTrace();
    }
  }
  /**
   * データ送受信用ソケットを取得します
   */
  private static Socket dataConnection(String ctrlcmd) 
      throws IOException,UnknownHostException {
    String cmd = "PORT ";
    ServerSocket serverDataSocket = new ServerSocket(0,1);
    for (int i=0;i<4;i++) {
      cmd = cmd + (localHostAddress[i] & 0xff) + ",";
    }
    cmd = cmd + (((serverDataSocket.getLocalPort())/256) & 0xff)
              + ","
              + (serverDataSocket.getLocalPort() & 0xff);

    ctrlOutput.println(cmd);
    ctrlOutput.flush();
    ctrlOutput.println(ctrlcmd);
    ctrlOutput.flush();

    Socket dataSocket = serverDataSocket.accept();
    serverDataSocket.close();
    return dataSocket;
  }
}
 
(注意)
「ホスト名」、「ユーザー名」、「パスワード」、「アップロードするディレクトリ」、「アップロードするファイル」は環境に合わせて設定してください。
◆転送するファイルの用意
転送するファイルをJavaのプログラムがあるディレクトリに置きます。ここでは「hello.zip」を置きました。
◆コンパイルと実行
コマンドプロンプト
C:\作業フォルダ\JavaHello>javac HelloWorldFTP.java

C:\作業フォルダ\JavaHello>java HelloWorldFTP

C:\作業フォルダ\JavaHello>

どうやらうまく動いたみたいです。さっそくサーバーにファイルが転送されているか見てみましょう。
Telnet
# cd /home/testuser
# ls
hello.zip
#
おおおお!!ファイルが転送されていますね!
 
■書籍
Java関連の書籍

 
  ネットで買えば断然お得!お買い物なら楽天市場
ツールの部屋 - Java関連の書籍 - デザインパターン - 情報交換掲示板 - HOME