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

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

新規登録して質問してみよう
ただいま回答率
85.35%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

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

Q&A

解決済

1回答

1741閲覧

ファイルを探して上書きしたい

yufu8

総合スコア5

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

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

0グッド

1クリップ

投稿2020/06/10 15:12

編集2020/06/11 04:17

ファイルが存在するか確認してファイルが存在したら上書きするようなプログラムを作りたいです。
OKが入力されたときに上書きできるようにしたいのですが、入力したところでプログラムが終了してしまいます。上書きはfinishが入力されるまで繰り返したいです。

java

1import java.io.File; 2import java.io.FileWriter; 3import java.io.IOException; 4 5public class Main { 6 public static void main(String[] args) throws IOException { 7 System.out.println(); 8 String fileName = new java.util.Scanner(System.in).nextLine(); 9 File file = new File(fileName); 10 11 String message = ""; 12 13 FileWriter filewriter = new FileWriter(file); 14 if (file.exists()) { 15 System.out.println("上書き : ok"); 16 System.out.println("終了 : その他"); 17 String passKey = new java.util.Scanner(System.in).nextLine(); 18 System.out.println(); 19 if (passKey.equalsIgnoreCase("w")) { 20 try { 21 while (!(message.equals("finish"))) { 22 System.out.print("Input String "); 23 message += new java.util.Scanner(System.in).nextLine(); 24 filewriter.write(message); 25 26 } 27 filewriter.close(); 28 } catch (IOException e) { 29 System.out.println(e); 30 31 } 32 } else { 33 34 } 35 36 } else { 37 file.createNewFile(); 38 try { 39 while (!(message.equals("finish"))) { 40 message = new java.util.Scanner(System.in).nextLine(); 41 System.out.print("Input String"); 42 filewriter.write(message); 43 44 } 45 filewriter.close(); 46 } catch (IOException e) { 47 System.out.println(e); 48 } 49 50 } 51 52 } 53}

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

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

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

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

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

YT0014

2020/06/10 15:21

while()の繰り返し条件を再確認してください。 また、ファイルコピーやファイル内容表示などのサンプルを見つけて、ファイル操作の定石を把握してください。
YT0014

2020/06/11 00:34

String同士の比較(==や!=)の意味をご確認ください。今度は、無限ループになっています。 また、新規のときのみ、例外を補足しているのは、どのような意図でしょうか? なお、標準入力に対するScannerを複数発生させるのは、動作が不安定になりやすいので、最初に作成してものを、以後も利用するようにしたほうが良いです。
yufu8

2020/06/11 04:18

ご指摘ありがとうございます Stringの比較について理解が不足していました 無限ループになってしまったのはどうしてでしょうか
YT0014

2020/06/11 04:28

>無限ループになってしまったのはどうしてでしょうか ”String同士の比較(==や!=)の意味をご確認ください。" コードを書いたら、どういう動きになるのか、1行ずつ考えながら確認していってください。 現状では、「コードが書けた」で終わっていて、最低限の見直しすらしていないのが、よくわかる状態です。 どこから"w"が出てきたんですか? kuuoteさんの回答は、もう忘れてしまっているんですか?
guest

回答1

0

ベストアンサー

このプログラムだとokが入力された時だけ処理が継続するので、OKと打っても一切処理は行われないです。もし大文字小文字を気にしないで処理したいのであればequalsの代わりにequalsIgnoreCaseを使う必要があります。
後どちらのwhileもですが、YT0014さんも言われていますが条件式が間違っているのと、ファイルを閉じる処理をループの外に出さないと一回で落ちます。

投稿2020/06/10 15:28

編集2020/06/10 15:30
kuuote

総合スコア705

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

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

yufu8

2020/06/11 00:11

ご指摘ありがとうございます。 whileの条件を修正してループすることができるようになったのですが、finishを入力してもループから抜け出せなくなってしまいました。これはどこが原因でしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問