どなたかご教授くださいませ。
具体的には、下記の内容のテキストファイルがあったとし、
1行目 あいうえお,かきくけこ
2行目 さしすせそ,たちつてと
3行目 なにぬねの,はひふへほ
・修正するメソッドに「まみむめも,やゆよ」を渡し、
結果
1行目 あいうえお,かきくけこ
2行目 まみむめも,やゆよ
3行目 なにぬねの,はひふへほ
となる。
入力ファイルを1行ずつ読み込んで、修正対象行なら修正内容を出力、それ以外は入力ファイルの内容をそのまま出力するのが良いかと思います。
指定された行番号に対応する行の内容を置き換えるのであれば、こんな感じになります:
static void replace(LineNumberReader in, PrintWriter out, int lineNumber, String s) throws IOException { String line; while ((line = in.readLine()) != null) { if (in.getLineNumber() == lineNumber) { out.println(s); } else { out.println(line); } } }
プログラミングの性質上、一度テキストファイルを全て読み込み、編集し、その後にテキストに全て書き出すという流れが必須です
下記ページの文言丸ごとではありませんが、どこまでがわからないのかがわからないのでここまでしか助言することができません
1. FileStreamのコンストラクタなどで、ファイルを開く。
2. StreamReader.ReadToEnd()ですべてStringへ読み込む。
3. そのStringで検索、置換をかける。
4. そのStringを、StreamWrite([String])で一気に書き込む。
5. Flush()して、ファイルを閉じる。
http://dobon.net/vb/bbs/log3-12/6804.html
もう少し具体的な、修正の性質や処理内容(検索・固定行列)などを挙げていただかなければなんともいえません
参考までに
入力ファイルを1行ずつ読み込んで、修正対象行なら修正内容を出力、それ以外は入力ファイルの内容をそのまま出力するのが良いかと思います。
指定された行番号に対応する行の内容を置き換えるのであれば、こんな感じになります:
static void replace(LineNumberReader in, PrintWriter out, int lineNumber, String s) throws IOException { String line; while ((line = in.readLine()) != null) { if (in.getLineNumber() == lineNumber) { out.println(s); } else { out.println(line); } } }
回答ありがとうございます。
実際使うとしたら下記のような感じでしょうか?
これだと書き込む位置が指定できてないので、どうしたらいいものかと・・・。
せっかく教えて頂いたのに分からなくて申し訳ないです。
public static void main(String[] args) throws IOException {
BufferedReader br = null;
PrintWriter pw = null;
LineNumberReader lnr = null;
try {
br = new BufferedReader(new FileReader(path));
lnr = new LineNumberReader(br);
pw = new PrintWriter(new BufferedWriter(new FileWriter(path)));
replace(lnr, pw, 2, "まみむめも,やゆよ");
} catch(Exception e) {
e.printStackTrace();
} finally{
try{
if(pw != null){
pw.close();
}
if(lnr != null) {
lnr.close();
}
}catch(Exception n){
}
}
}
static void replace(LineNumberReader in, PrintWriter out, int lineNumber,
String s) throws IOException {
String line;
while ((line = in.readLine()) != null) {
if (in.getLineNumber() == lineNumber) {
out.println(s);
} else {
out.println(line);
}
}
}
こんな感じかな?
>|Java|
private void hoge(int line, String str) {
try{
File file = new File("test.txt");
BufferedReader br = new BufferedReader(new FileReader(file));
ArrayList<String> strArr = new ArrayList<String>();
String s;
while((s = br.readLine()) != null) strArr.add(s);
br.close();
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
for (int i = 0; i < strArr.size(); i++) {
if (i == line-1) bw.write(str + "\n");
else bw.write(strArr.get(i) + "\n");
}
bw.close();
}catch(Exception e){
System.out.println("ファイル読み込み失敗");
}
}
||<
回答ありがとうございます。
実際使うとしたら下記のような感じでしょうか?
これだと書き込む位置が指定できてないので、どうしたらいいものかと・・・。
せっかく教えて頂いたのに分からなくて申し訳ないです。
public static void main(String[] args) throws IOException {
BufferedReader br = null;
PrintWriter pw = null;
LineNumberReader lnr = null;
try {
br = new BufferedReader(new FileReader(path));
lnr = new LineNumberReader(br);
pw = new PrintWriter(new BufferedWriter(new FileWriter(path)));
replace(lnr, pw, 2, "まみむめも,やゆよ");
} catch(Exception e) {
e.printStackTrace();
} finally{
try{
if(pw != null){
pw.close();
}
if(lnr != null) {
lnr.close();
}
}catch(Exception n){
}
}
}
static void replace(LineNumberReader in, PrintWriter out, int lineNumber,
String s) throws IOException {
String line;
while ((line = in.readLine()) != null) {
if (in.getLineNumber() == lineNumber) {
out.println(s);
} else {
out.println(line);
}
}
}