1

いろいろなフォーラムから見てプログラムを書こうとしています。次のようにプログラムし、既存の txt ファイルの 3 行目以降、5 行目前に行を追加します。& このプログラムの実行が完了したときに前の行を安全に保持しようとしましたが、3 行目と 5 行目の間に入力できませんでした。5 行目の下に追加されます。この基本的なプログラムが機能する場合、ファイルの 3 行目と 5 行目の間に「文字列の配列」を追加しようとします。

import java.io.BufferedWriter;  
import java.io.File;  
import java.io.FileReader;  
import java.io.FileWriter;  
import java.io.IOException;  
import java.io.LineNumberReader;  

public class WriteToFileExample {  

    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
String content = "This is the content to write into file by Mandar";  
File file = new File("/example/mandar.txt");  
if(!file.exists()){  
    try {  
        file.createNewFile();  
    } catch (IOException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }  
    try {  
        FileWriter fw = new FileWriter(file.getAbsoluteFile(),true);  
        BufferedWriter bw = new BufferedWriter(fw);  
        bw.write(content);  
        bw.newLine();  
        bw.close();  
        System.out.println("Done");  
    } catch (IOException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }  


}else{  
    try {  
        LineNumberReader lnr = new LineNumberReader(new FileReader(file));  
        FileWriter fw = new FileWriter(file.getAbsoluteFile(),true);  
        BufferedWriter bw = new BufferedWriter(fw);  
        lnr.setLineNumber(6);  
        for(int i =1; i<lnr.getLineNumber();i++){  
//          System.out.println("for = "+i);  
//          bw.newLine();  
            if(i == 3){  
                System.out.println("4");  
                bw.write(content);  
//              bw.newLine();  
            }  
        }  
        bw.close();  
        System.out.println("Done1");  
    } catch (IOException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }  
}  
    }  

}

私を助けてください。手がかりもアイデアも得られません。

4

2 に答える 2

0

を使用してを 6 行目に書き込むようlnr.setLineNumber(6)に設定しています。ループは単純に 1 から 6 までループし、6 行目に内容を書き込みます。これはまだテストしていませんが、 for ループを使用して削除してみてください。lnrfori==3lnr.setLineNumber(4)

于 2013-03-25T18:21:22.960 に答える
0

ありがとうjavabreakpoint、私は次のようにあなたの方法で私のシナリオを試しました

import java.io.*;

public class JInsert {
 public static void main(String args[]){
 try {
   JInsert j = new JInsert();
   File file = new File("/example/mandar.txt");
   j.insertStringInFile(file, 4, "4");
  // j.insertStringInFile(file,Integer.parseInt(args[1]), args[2]);
   }
 catch (Exception e) {
   e.printStackTrace();
   }
 }

 public void insertStringInFile
     (File inFile, int lineno, String lineToBeInserted) 
   throws Exception {
 // temp file
 File outFile = new File("/example/$$$$$$$$.tmp");

 // input
 FileInputStream fis  = new FileInputStream(inFile);
 BufferedReader in = new BufferedReader
     (new InputStreamReader(fis));

 // output         
 FileOutputStream fos = new FileOutputStream(outFile);
 PrintWriter out = new PrintWriter(fos);

 String thisLine = "";
 int i =1;
 while ((thisLine = in.readLine()) != null) {
   if(i == lineno) out.println(lineToBeInserted);
   out.println(thisLine);
   i++;
   }
out.flush();
out.close();
in.close();

inFile.delete();
outFile.renameTo(inFile);
}
}

しかし、上記のプログラムを実行する前に、ファイル mandar.txt で次のように予想される新しい問題が 1 つあります。

1
2
3

5

上記のプログラムを実行する前に mandar.txt を次のように変更した場合:-

1

2
3
5

空白行が 1 と 2 の間で変更されることを意味しますが、文字列 "4" は 3 と 5 の間に入力する必要があることを人間は知っています。

 1

 2
 4
 3
 5

任意の行番号で 3 と 5 の間にいつでもそれを確保するにはどうすればよいですか? プログラム1で2つの方法を取得することを意味します。行番号2.行の内容は、挿入する必要がある場所に安全に挿入されます。

于 2013-03-26T06:09:05.893 に答える