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

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

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

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

Q&A

3回答

1127閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2018/04/30 08:26

プログラムをコンパイル、実行でウィンドウは正常に動作するんですが、
以下のエラーが出てテキストファイルが表示されないのですが、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(); } } } }

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

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

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

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

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

webarata3

2018/04/30 08:36

実行はどういった環境で行っていますか?Eclipse?コマンドプロンプト?
退会済みユーザー

退会済みユーザー

2018/04/30 08:40

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

回答3

0

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

Java

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

Java

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

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

Java

1 public void actionPerformed(ActionEvent ev) { 2 final String filename = "sample.txt"; 3 if(ev.getSource() == b1) 4 5 this.load(filename); 6 7 else if(ev.getSource() == b2) 8 9 this.save(filename); 10 11 } 12 public void save(String filename){ 13 // 中略 14 } 15 public void load(String filename){ 16 // 中略 17 }

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


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

txt

1…List4_13 2 \src\sample4\List4_13.java 3 \bin 4 \sample4\sample.txt

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

java

1package sample4; 2 3import java.awt.BorderLayout; 4import java.awt.event.ActionEvent; 5import java.awt.event.ActionListener; 6import java.io.BufferedReader; 7import java.io.BufferedWriter; 8import java.io.FileReader; 9import java.io.FileWriter; 10import java.util.stream.Collectors; 11 12import javax.swing.JButton; 13import javax.swing.JFrame; 14import javax.swing.JPanel; 15import javax.swing.JScrollPane; 16import javax.swing.JTextArea; 17import javax.swing.SwingUtilities; 18 19@SuppressWarnings("serial") 20public class List4_13 extends JFrame implements ActionListener { 21 22 private final JButton btnLoad = new JButton("Load"); 23 private final JButton btnSave = new JButton("Save"); 24 private final JTextArea textarea = new JTextArea(); 25 private final JScrollPane scroll = new JScrollPane(textarea); 26 27 public List4_13() { 28 this.setDefaultCloseOperation(EXIT_ON_CLOSE); 29 this.setSize(400, 300); 30 31 this.add(scroll, BorderLayout.CENTER); 32 btnLoad.addActionListener(this); 33 btnSave.addActionListener(this); 34 35 JPanel p = new JPanel(); 36 p.add(btnLoad); 37 p.add(btnSave); 38 this.add(p, BorderLayout.SOUTH); 39 } 40 41 public static void main(String[] args) { 42 SwingUtilities.invokeLater(() -> { 43 List4_13 frame = new List4_13(); 44 frame.setVisible(true); 45 }); 46 } 47 48 public void actionPerformed(ActionEvent ev) { 49 final String filename = "sample4/sample.txt"; 50 if (ev.getSource() == btnLoad) { 51 this.load(filename); 52 return; 53 } 54 if (ev.getSource() == btnSave) { 55 this.save(filename); 56 return; 57 } 58 } 59 60 public void load(String filename) { 61 try (FileReader fr = new FileReader(filename); BufferedReader br = new BufferedReader(fr)) { 62 String str = br.lines().collect(Collectors.joining("\r\n")); 63 textarea.setText(str); 64 } catch (Exception ex) { 65 ex.printStackTrace(); 66 } 67 } 68 69 public void save(String filename) { 70 try (FileWriter fw = new FileWriter(filename); BufferedWriter bw = new BufferedWriter(fw)) { 71 bw.write(textarea.getText()); 72 bw.flush(); 73 } catch (Exception ex) { 74 ex.printStackTrace(); 75 } 76 } 77}

投稿2018/04/30 08:45

編集2018/04/30 09:29
umyu

総合スコア5846

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

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

退会済みユーザー

退会済みユーザー

2018/04/30 08:47

ありがとうございます。
退会済みユーザー

退会済みユーザー

2018/04/30 08:51

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

退会済みユーザー

2018/04/30 08:52

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

2018/04/30 08:54

>sanchu52さんへ 直したというのはload/saveどちらに合わせましたか?
退会済みユーザー

退会済みユーザー

2018/04/30 09:02

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

退会済みユーザー

2018/04/30 10:25

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

0

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

投稿2018/04/30 08:42

webarata3

総合スコア367

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

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

退会済みユーザー

退会済みユーザー

2018/04/30 08:54

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

0

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

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

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 08:35

BeatStar

総合スコア4958

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

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

退会済みユーザー

退会済みユーザー

2018/04/30 08:46

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

退会済みユーザー

2018/04/30 09:36

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問