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

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

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

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

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

3906閲覧

Javaで指定した行に追記

cacao86

総合スコア97

ファイル

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

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2020/05/26 11:02

Javaのファイル操作について勉強しているものです。
Javaであるファイル(sample.text)の奇数行にだけ行の末尾に_oddと追記して新規のファイル(sample_new.text)として保存したいと思っております。
今現在、元のファイルの文字が消され新規のファイルで_oddだけが10行ぶん表示されてしまいます。
Javaでの配列の扱い方も拙く汚いですが手探りで作って見ているところです。
指定した行に追記できる方法のアドバイスをお願いしたいです。
よろしくお願いします。

Java

1import java.util.*; 2import java.io.*; 3 4public class file_rw { 5 public static void main(String arg[]){ 6 try{ 7 Scanner s = new Scanner(System.in); 8 System.out.println("ファイル名を入力してください "); 9 String fileName = s.next(); 10 File oldFile = new File(fileName +".text"); 11 File newFile = new File(fileName + "_new.text"); 12 FileReader fr = new FileReader(oldFile); 13 FileWriter fw = new FileWriter(newFile, true); 14 BufferedReader br = new BufferedReader(fr); 15 BufferedWriter bw = new BufferedWriter(fw); 16 PrintWriter pw = new PrintWriter(bw); 17 // oldFile.renameTo(newFile); 18 String line; 19 List<String> lineList = new ArrayList<String>(); 20 while((line = br.readLine()) != null){ 21 lineList.add(line); 22 } 23 for(int i = 0; i < lineList.size(); i++){ 24 if(i % 2 != 0){ 25 pw.println("_odd"); 26 pw.flush(); 27 pw.close(); 28 } 29 System.out.println(lineList.get(i)); 30 } 31 32 br.close(); 33 }catch(IOException e){ 34 System.out.println(e); 35 } 36 37 } 38}

sample.text

1sample.text 21 32 43 54 65 76 87 98 109 1110
理想のsample_new.text 1_odd 2 3_odd 4 5_odd 6 7_odd 8 9_odd 10 現在のsample_new.text _odd _odd _odd _odd _odd _odd _odd _odd _odd _odd

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

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

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

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

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

gentaro

2020/05/26 11:48

そもそもsample_new.textというファイルは新規に作成するわけですよね。 なら pw.println("_odd");しかしていないのはおかしいと思いませんか? 「1」や「2」の数値の部分はどこで書かれると思ってます? あとpw.close()するタイミングはfor文の外じゃないですか?
退会済みユーザー

退会済みユーザー

2020/05/26 11:52

えっとちょっときくけどなんで 奇数のところに odd(偶数)をつけてるの?
guest

回答1

0

ベストアンサー

考え方を変えて「元の内容に追記」ではなく「元の内容+追加する文字列を新しく書き出す」としたらどうでしょうか。
以下のようにすればlineListから指定した行の内容+追加文字列が出力されると思います。

Java

1 for(int i = 0; i < lineList.size(); i++){ 2 if(i % 2 != 0){ 3 pw.println(lineList.get(i)+"_odd");

※これだけではまだ半分ですが。

投稿2020/05/26 11:53

javahack

総合スコア1088

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

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

cacao86

2020/05/27 00:53

ご回答ありがとうございます! こちらの回答を参考にしたら無事希望通りの出力ができました! その考え方は思い浮かばなかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問