質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1417閲覧

FTPS接続先のフォルダからcsvのファイルフォルダごと取得したい

woooo

総合スコア26

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/01/25 06:21

編集2019/01/28 05:12

FTPSサーバーのフォルダにcsvファイルを置き、
そのファイルが入っているフォルダを取ってきて、
1行ごとに処理するロジックが分かりません。

読み込むときは、DtoClassを作成しています。

現時点で下記のところまでできています。

java

1String hostName = "FTPS_HOST"; // FTPSホスト名 2String userName = "FTPS_ACCESS_ID"; // FTPSホストID 3String password = "FTPS_ACCESS_PASS"; // FTPSホストパスワード 4 5String RemoteDir = "/hoge.com/public_html/MMR_PKG/5701296/160920_133650_13/SNAP/" ; // getHostFilePath 6String LocalDir = "/home/user/EndoTemp/"; // getDestFilePath 7FileOutputStream os = null; 8// FTPClientの生成 9FTPClient ftpclient = new FTPClient(); 10try { 11 // サーバに接続 12 ftpclient.connect(hostName); 13 if (!FTPReply.isPositiveCompletion(ftpclient.getReplyCode())) { 14 log("connection failed", "", 1); 15 } 16 17 // ログイン 18 if (ftpclient.login(userName, password) == false) { 19 log("login failed", "", 1); 20 } 21 22 // アスキーモードに設定 23 ftpclient.setFileType(FTPClient.ASCII_FILE_TYPE); 24 25 // カレントディレクトリを変更 26 ftpclient.changeWorkingDirectory(RemoteDir); 27 // カレントディレクトリの中の全ファイルを取得 28 FTPFile[] names = ftpclient.listFiles(); 29 30 for( int i=0 ;i<names.length ; i++){ 31 String eachFileName = names[i].getName(); 32 if(eachFileName.length()>3){ 33 // ファイルを受信 34 os = new FileOutputStream(LocalDir + eachFileName); 35 ftpclient.retrieveFile(RemoteDir + eachFileName, os); 36 os.close(); 37 } 38 } 39     40} catch (Exception e) { 41 42} finally { 43 ftpclient.disconnect(); 44 os.close(); 45}

csvファイルのファイル名は
test_yyyyMMddHHmmss_001.csv
test_yyyyMMddHHmmss_002.csv
というように日時(yyyyMMddHHmmss)と
連番が含まれています。

処理の流れとしては、
サーバー上のフォルダからcsv
1つずつファイルを取得し、1つずつ処理をしていくという流れにしたいです。
Aファイルを取得→Aファイルを読み込む→DB更新
Bファイルを取得→Bファイルを読み込む→DB更新
Cファイルを取得→Cファイルを読み込む→DB更新

参考にしたサイトは
https://www.saka-en.com/java/java-ftp-connect-put-get/
http://katurademo.com/Java/mmr/filelist.html
http://www.visards.co.jp/java/net/net04.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/25 12:45

サーバーに接続失敗、ログインに失敗したらどこからファイルとってくる気なんだろう(机上デバッグ)
jimbe

2019/01/25 12:59

「DB更新」とはなんでしょう.
woooo

2019/01/28 01:20

インサートです。
jimbe

2019/01/28 05:31 編集

いえ、そういうことではありません. 「フォルダを取ってきたいと思っています」とご質問されていて, コード上にデータベースの(接続のコードの)欠片も見当たりません. 「処理の流れとしては」, 特定のフォルダ下の全ファイルを「1つずつ処理をしてい」っているように, コメントやメソッド名から推察します. つまり, 既に「フォルダ(下の全CSV(?)ファイル)を取って」きているように見えます. これ以上何をお望みでしょうか.
woooo

2019/01/28 04:20

まだFTPSサーバーが立ち上がっていないので、動確をできていませんが、 聞きたいのは、 取って来たファイルをどの変数に入れ、どのようなロジックを組めば、 取って来たファイルの中身のそれぞれの値を取り出せるのかを知りたいです。
jimbe

2019/01/28 05:29

FTP と CSV ではお話が全く違います. このご質問では, FTP でファイルを取ってくることがメインに見えますが, 実は FTP と関係無く(動作確認は環境的に出来ていないけれどもコードは既に出来ていて), FTP で取ってきてローカルに作成された CSV ファイルを(再度)読み込んで解析してデータベースに入れる部分がご質問ということですか. でしたら, FTP は検索して出来たのですから, 今度は CSV を読んで解析するにはどうするのかを検索してみては如何でしょう. データベースに接続して書き込むというのも, 対象のデータベースが何なのか Oracle なのか PostgreSQL なのか 等によっても違う部分がありますのでそれらをキーワードに入れて検索されれば, きっと見つかると思います.
jimbe

2019/01/28 05:55 編集

切り分ける手順としまして, if(eachFileName.length()>3){ // ファイルを受信 os = new FileOutputStream(LocalDir + eachFileName); ftpclient.retrieveFile(RemoteDir + eachFileName, os); os.close(); writeDatabaseFromCSV(LocalDir + eachFileName); //※追加 } とし, 新しく `writeDatabaseFromCSV(String csvFilePath)` というメソッドを作って, この中でパラメータで渡されたCSVファイル名からファイルをオープン・読み込み・解析してデータベースに書き込む処理を記述します. こうすることで, このメソッドを直接呼ぶことで(もちろんローカルにCSVファイルを用意する必要はありますが) FTP に関係なく CSV → DB のテストが出来るようになります.
guest

回答1

0

ベストアンサー

mgetが実装されてるftpサーバー/クライアントならmget *.csvで全部とってこれますよ

投稿2019/01/25 12:48

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

woooo

2019/01/28 01:21

他にありますでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問