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

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

ただいまの
回答率

90.34%

  • Java

    14392questions

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

プログラムをコンパイル、実行でウィンドウは正常に動作するんですが、テキストファイルが表示されない

受付中

回答 3

投稿

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

sanchu52

score 142

プログラムをコンパイル、実行でウィンドウは正常に動作するんですが、
以下のエラーが出てテキストファイルが表示されないのですが、sample.txtの
パスが悪いようです。どこに置いたらいいか、どうしたらいいか教えてください。

ava.io.FileNotFoundException: sample4\sample.txt (指定されたパスが見つかりません。)
at java.io.FileInputStream.open0(Native Method)
...省略

package sample4;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class List4_13 extends JFrame implements ActionListener{

    private static final long serialVersionUID = 1L;

        JButton b1,b2;

        JTextArea ta;

    public List4_13() {

        this.setSize(400,300);

        ta = new JTextArea();

        JScrollPane scroll = new JScrollPane(ta);

        this.add(scroll,BorderLayout.CENTER);

        b1 = new JButton("Load");

        b1.addActionListener(this);

        b2 = new JButton("Save");

        b2.addActionListener(this);

        JPanel p = new JPanel();

        p.add(b1);

        p.add(b2);

        this.add(p,BorderLayout.SOUTH);

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        this.setVisible(true);
    }

    public static void main(String[] args) {

        new List4_13();
    }

    public void actionPerformed(ActionEvent ev) {

        if(ev.getSource() == b1)

            this.load();

        else if(ev.getSource() == b2)

            this.save();

    }

    public void load() {

        FileReader fr = null;

        BufferedReader br = null;

        try {

            fr = new FileReader("sample4/sample.txt");

            br = new BufferedReader(fr);

            String str = "";

            String rstr = "";

            while((rstr = br.readLine()) != null)

                str += rstr + "\r\n";

            ta.setText(str);

        }catch(Exception ex) {

            ex.printStackTrace();

        }finally {

            try {

                br.close();

            }catch(Exception ex2) {

                ex2.printStackTrace();
            }
        }
    }

    public void save(){

        FileWriter fw = null;

        BufferedWriter bw = null;

        try {

            fw = new FileWriter("sample.txt");

            bw = new BufferedWriter(fw);

            bw.write(ta.getText());

            bw.flush();

        }catch(Exception ex) {

            ex.printStackTrace();

        }finally {

            try {

                bw.close();

            }catch(Exception ex2) {

                ex2.printStackTrace();

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • webarata3

    2018/04/30 17:36

    実行はどういった環境で行っていますか?Eclipse?コマンドプロンプト?

    キャンセル

  • sanchu52

    2018/04/30 17:40

    Eclipseです。ウインドウのボタン「load」をクリックするとたくさんのエラーが出ています。

    キャンセル

回答 3

+2

loadとsaveで読み込んでいるファイルパスが違います。
手順としてはsaveボタンをまずクリックしないと行けないのではないでしょうか?
参考した物にその旨記載がありませんか?

fr = new FileReader("sample4/sample.txt");
fw = new FileWriter("sample.txt");

対応としては同じパスを渡すで良いと思いますが。
loadとsaveにファイルパスを与えるStringを追加して以下のような修正にしたほうがミスが発生しずらくなるかと。

    public void actionPerformed(ActionEvent ev) {
        final String filename = "sample.txt";
        if(ev.getSource() == b1)

            this.load(filename);

        else if(ev.getSource() == b2)

            this.save(filename);

    }
    public void save(String filename){
        // 中略
    }
    public void load(String filename){
        // 中略
    }


あとコードの記述方法がtry-with-resources 文を使っていない(Java 1.7以前)書き方なので、もし参考にしている文献とうあるなら、あまり参考にされないほうが良いかと。
◇参考情報
try-with-resources 文


多分 eclipseの実行メニューの実行構成が以下のような設定になってるのではないでしょうか?
イメージ説明
この場合sample4/sample.txtは以下のような形の設置になります。

…List4_13
         \src\sample4\List4_13.java
         \bin
         \sample4\sample.txt

以下は今風のソースコードです。ご参考まで

package sample4;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.stream.Collectors;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class List4_13 extends JFrame implements ActionListener {

    private final JButton btnLoad = new JButton("Load");
    private final JButton btnSave = new JButton("Save");
    private final JTextArea textarea = new JTextArea();
    private final JScrollPane scroll = new JScrollPane(textarea);

    public List4_13() {
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setSize(400, 300);

        this.add(scroll, BorderLayout.CENTER);
        btnLoad.addActionListener(this);
        btnSave.addActionListener(this);

        JPanel p = new JPanel();
        p.add(btnLoad);
        p.add(btnSave);
        this.add(p, BorderLayout.SOUTH);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            List4_13 frame = new List4_13();
            frame.setVisible(true);
        });
    }

    public void actionPerformed(ActionEvent ev) {
        final String filename = "sample4/sample.txt";
        if (ev.getSource() == btnLoad) {
            this.load(filename);
            return;
        }
        if (ev.getSource() == btnSave) {
            this.save(filename);
            return;
        }
    }

    public void load(String filename) {
        try (FileReader fr = new FileReader(filename); BufferedReader br = new BufferedReader(fr)) {
            String str = br.lines().collect(Collectors.joining("\r\n"));
            textarea.setText(str);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void save(String filename) {
        try (FileWriter fw = new FileWriter(filename); BufferedWriter bw = new BufferedWriter(fw)) {
            bw.write(textarea.getText());
            bw.flush();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/30 17:47

    ありがとうございます。

    キャンセル

  • 2018/04/30 17:51

    eclipseの参考書で勉強中です。 それでその中のコードを試しながら読み進んでいるところなので、
    むつかしいことは分かりません。ゴールデンウイークで一通り読み終わってから復習しようと思っているので
    よろしくお願いいたします。

    キャンセル

  • 2018/04/30 17:52

    パスは直して実行しましたが同じでした

    キャンセル

  • 2018/04/30 17:54

    >sanchu52さんへ
    直したというのはload/saveどちらに合わせましたか?

    キャンセル

  • 2018/04/30 18:02

    "sample4/sample.txt”にしました。
    半分ほど来ましたんですが。何とか最後まで行けそうなんですが。
    2011年発行、eclipse3.7ではじめる JAVAプログラミング入門 掌田 津耶乃 著 (569p)です

    キャンセル

  • 2018/04/30 19:25

    教えて頂いたコードを実行してみました。@SuppressWarnings("serial")というwarningが出ているんですが、やっぱりテキストファイルを読み込まないですね。
    一応ウインドウが出ていますので、前に進みます。

    キャンセル

+1

これだけでは答えようがないけど、一応答えます。

可能性としてパスが間違っている。

C:\test\javaTestorに 動かすjarファイルもしくはclassファイルがあり、そこから考えた相対パスでのファイル指定だとします。

で、コマンドプロンプトで C:\Ohayou\ からドラッグアンドドロップで起動しようとしていたりとか。

ファイル指定 等で相対パスを指定すると「カレントディレクトリ」から考えた相対パスになります。

アクセスしている位置が違うので例外が投げられたのでは?

また、エラーは今回の場合はエラーじゃなくて厳密には「例外」です。

ava.io.FileNotFoundException: sample4\sample.txt (指定されたパスが見つかりません。)
at java.io.FileInputStream.open0(Native Method)


ですよね。

File ( ファイル ) Not Found ( 見つからない ) Exception ( 例外 ) なので、「ファイルが見つからないという例外」です。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/30 17:46

    ありがとうございます。Javaプロジェクト(Sample4_13 )/ sample4(パッケージ)
    でここに sample.txtを置いて実行しています。

    キャンセル

  • 2018/04/30 18:36

    sample4(パッケージ)の下だと、Javaプロジェクトからの相対パスは「src/sample4/sample.txt」とかになりますね。@webarata3 さんが言っているようにプロジェクト直下にsample4フォルダを作ってそこに置く必要があります。

    キャンセル

+1

Eclipse上で実行している場合、同プロジェクトの直下に「sample4」フォルダを作り、その中に「sample.txt」ファイルを作ります。説明は先に回答されている方のとおりです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/30 17:54

    そうしているんですが表示されません。前にjpgをsample2で表示し手、成功していたので同じように
    しているのですが。

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • Java

    14392questions

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

  • トップ
  • Javaに関する質問
  • プログラムをコンパイル、実行でウィンドウは正常に動作するんですが、テキストファイルが表示されない