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

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

ただいまの
回答率

91.87%

  • Java

    8676questions

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

java ftpファイルダウンロード

解決済

回答 4

投稿 2017/01/26 15:35

  • 評価
  • クリップ 0
  • VIEW 199

daidaidada

score 3

前提・実現したいこと

javaでftpからファイルをダウンロードしたいのですがエラーによりうまくいきません。

発生している問題・エラーメッセージ

01-26 06:22:22.461 7710-7710/com.example.intern.ftpconnect I/System.out: C\hogehoge.txt (Read-only file system)
01-26 06:22:22.461 7710-7710/com.example.intern.ftpconnect I/System.out: ファイルは存在しません。

該当のソースコード

java
ここにご自身が実行したソースコードを書いてください
FileOutputStream os = null;
try{
//File SEND
os = new FileOutputStream("C:\\hogehoge.txt");
ftpClient.retrieveFile("hogehoge.txt", os);
os.close();
System.out.println("FTP GET COMPLETED");

}catch(Exception e){
System.out.println(e.getMessage());
File file = new File("hogehoge.txt");
if (file.exists()) {
System.out.println("ファイルは存在します。");
} else {
System.out.println("ファイルは存在しません。");
}

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報
初心者で全く見当もつかないのでご教授お願いいたします。

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

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

    クリップした質問はマイページの「クリップ」タブからいつでも見ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

0

例外の詳細を出していないため正確な回答が得られるかわかりませんが、以下の問題があります。

//File SEND 
  os = new FileOutputStream("C:\\hogehoge.txt"); 
  ftpClient.retrieveFile("hogehoge.txt", os); 
  os.close(); 
  System.out.println("FTP GET COMPLETED");
} catch(Exception e){ 
  System.out.println(e.getMessage());  // -------------- (1)
  File file = new File("hogehoge.txt");  // -------------(2)
  if (file.exists()) { 
  System.out.println("ファイルは存在します。"); 
} else { 
  System.out.println("ファイルは存在しません。"); 
}

(1) e.printStackTrace()を使って例外のスタックトレースを出しましょう。原因がつかめます。
(2) 冒頭のFileOutputStreamで指定しているファイルと異なるパスを指定しています。
書くならば次のようにすると、まずは原因がつかめて良いかと。

void exec() throws Exception {
  File file = new File("D:\\output.txt");
  try (FileOutputStream fos = new FileOutputStream(file)) {
    String remote = "path/to/ftpremotefile"; // FTPで取得するファイル名
    ftpClient.retrieveFile(remote, fos);
    System.out.println("FTP GET COMPLETED");
  } catch (Exception e) {
    e.printStackTrace();
    throw e;
  }
}

投稿 2017/01/27 13:35

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/01/27 14:42

    ご丁寧にありがとうございます。解決しました。

    キャンセル

0

Windows Vista 以降では UAC という機構により、一部フォルダへのファイル書き込みは、権限を昇格させないと拒否されるようになっています。次のフォルダは書き込み制限対象です。

  • システムフォルダ(C:\Windows)
  • 標準のプログラム配置フォルダ(C:\Program Files)
  • 標準のデータフォルダ(C:\ProgramData)
  • システムドライブルートフォルダ(C:\)

C:\hogehoge.txt はこの制限に引っ掛かりますから、書き込めません。
他の場所を指定してみてください。

投稿 2017/01/26 15:42

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/01/26 15:50

    回答ありがとうございます。
    他のフォルダにて試してみたところ同様のエラーとなりました…

    キャンセル

  • 2017/01/26 16:20

    使用している FTPClient のライブラリは、Apache Commons ではないのでしょうか?
    普通 Apache Commons の org.apache.commons.net.ftp.FTPClient を使うのが楽でよいのですが。

    キャンセル

  • 2017/01/26 16:29

    ありがとうございます。org.apache.commons.net.ftp.FTPClient を使っており、色んな方のサンプルコードを使ってみたのですがずっとこのエラーがでておりまして…

    キャンセル

  • 2017/01/26 16:33

    気になるのは Read-only file system の記述なのですが、もしかして C:\ 全体に対して書き込み禁止に設定されているマシン上で動かしてたりしませんか。
    ※例えば Thin Client のようなものだと、そもそもローカルに一切ファイルを保存できなかったりします

    キャンセル

  • 2017/01/26 16:49

    親身にありがとうございます。
    file.canWrite()で確認したところ書き込み可能とでたのでできるはずなのですか。
    記載し忘れてまして申訳ないですが、android studioにてftpのダウンロードを行おうとしたところ上記のエラーです。

    キャンセル

0

「/com.example.intern.ftpconnect I/System.out: C\hogehoge.txt (Read-only file system) 」
このエラーは、質問のコードの

os = new FileOutputStream("C:\\hogehoge.txt"); 


で起きていて、読み出し専用(書き込み禁止)であるファイル "C:\\hogehoge.txt" に出力(書き込み)するFileOutputStreamを作ろうとした事が原因です。

この問題は、"C:\\hogehoge.txt"のパーミッションを、誰でも書き込みが出来るように変更する事で解決すると思われます。

投稿 2017/01/26 15:54

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/01/26 16:21

    回答ありがとうございます。
    早速権限を書き込み可能にしてみたのですがダメみたいです…

    キャンセル

  • 2017/01/26 17:44

    「C\hogehoge.txt (Read-only file system) 」というメッセージが出続けますか?

    キャンセル

  • 2017/01/27 14:41

    解決しました.ありがとうございます。原因は、Android studio上で行っていたためでした。

    キャンセル

0

ファイル開きっぱなしで書きこみ権限を奪えないとか。

投稿 2017/01/26 18:00

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/01/27 14:42

    ありがとうございます。解決しました。

    キャンセル

teratailには29人のエキスパートがいます

今すぐはじめる

もっと詳しく

関連した質問

  • 受付中

    csvの抽出条件について質問です

    csvファイルの読み込みにキーボード入力をした文字と一致するものを抽出させるプログラムをつくっています。 ただ読み込むだけならできるのですが、それに条件をつけると読み込めなくなりま

  • 解決済

    BufferedWriter, BufferedReader を使った書き込み

    import java.IO.*; Javaでlog.txtというファイルに、改行して下へ下へ書き込みをしていきたいのですが、コンパイルはできますが思うように動いてくれません。 以

  • 解決済

    【Java】ストリームのクローズ処理について

    Javaのストリームのクローズ処理について、通常下記の通りとなるかと思います。         BufferedWriter out = null;         try {

同じタグがついた質問を見る

  • Java

    8676questions

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

閲覧数の多いJavaの質問