#実現したいこと
ftpサーバーに保存されているファイル情報をsocket通信を使用してFile型で取得したいです。
##背景
FFFTPのようなFtpクライアントソフトを作成しており、APIのjava.clientではなくsocket通信を使用して作成したいと考えています。
ファイルの受信や送信は別クラスで作成しており、ftpサーバーに保存されているファイルをFile型で取得し、一覧表示する方法を模索しています。
下記プログラムでString型では取得することができたのですが、File型で取得する方法がわからないので教えていただきたいです。
Java
1import java.io.BufferedReader; 2import java.io.InputStreamReader; 3import java.io.PrintWriter; 4import java.net.ServerSocket; 5import java.net.Socket; 6 7class test { 8 9 public static void main(String args[]) { 10 String host = "ipアドレス"; 11 int ctrl_port = 8021; 12 String user = "ユーザネーム"; 13 String pass = "パスワード"; 14 String home = "/"; 15 16 Socket ctrlSocket = null; 17 PrintWriter ctrlOutput = null; 18 19 Socket dataSocket = null; 20 BufferedReader dataReader = null; 21 22 try { 23 // FTPサーバと8021番ポートでコネクションをはる 24 ctrlSocket = new Socket(host, ctrl_port); 25 26 // コマンドを書くよう 27 ctrlOutput = new PrintWriter(ctrlSocket.getOutputStream()); 28 29 // FTPクライアント(このプログラムを実行するホスト)のアドレスを取得 30 byte[] local_address = ctrlSocket.getLocalAddress().getAddress(); 31 32 // FTPログイン 33 ctrlOutput.println("USER " + user); 34 ctrlOutput.flush(); 35 ctrlOutput.println("PASS " + pass); 36 ctrlOutput.flush(); 37 38 // ディレクトリに移動 39 ctrlOutput.println("CWD " + home); 40 ctrlOutput.flush(); 41 42 // 接続をまつ 43 ServerSocket dataServerSocket = new ServerSocket(0, 1); 44 // 待ちうけポートを取得 45 int data_port = dataServerSocket.getLocalPort(); 46 47 // PORTコマンドを作成 48 String port_command = "PORT "; 49 for (byte b : local_address) { 50 port_command += (b & 0xff) + ","; 51 } 52 port_command += (data_port / 256) & 0xff; 53 port_command += ","; 54 port_command += data_port & 0xff; 55 56 // FTPサーバに待ちうけている場所を教えてあげる 57 ctrlOutput.println(port_command); 58 ctrlOutput.flush(); 59 60 // NLSTコマンド 61 ctrlOutput.println("LIST"); 62 ctrlOutput.flush(); 63 64 // サーバからの接続をうけつける 65 dataSocket = dataServerSocket.accept(); 66 dataServerSocket.close(); 67 68 // サーバから送られてくる情報をよみとる 69 dataReader = new BufferedReader(new InputStreamReader( 70 dataSocket.getInputStream())); 71 72 System.out.println("dataReader =" + dataReader); 73 74 for (String line = dataReader.readLine(); line != null; line = dataReader 75 .readLine()) { 76 // 表示 77 System.out.println("line ="+line); 78 } 79 80 } catch (Exception e) { 81 e.printStackTrace(); 82 } finally { 83 if (dataReader != null) { 84 try { 85 dataReader.close(); 86 } catch (Exception e) { 87 e.printStackTrace(); 88 } 89 } 90 if (dataSocket != null) { 91 try { 92 dataSocket.close(); 93 } catch (Exception e) { 94 e.printStackTrace(); 95 } 96 } 97 98 if (ctrlOutput != null) { 99 ctrlOutput.close(); 100 } 101 if (ctrlSocket != null) { 102 try { 103 ctrlSocket.close(); 104 } catch (Exception e) { 105 e.printStackTrace(); 106 } 107 } 108 } 109 } 110 111} 112
回答1件
あなたの回答
tips
プレビュー