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

您正在使用lnr.setLineNumber(6)将 设置lnr为写入第 6 行。您的for循环只是从 1 循环到 6 并在第 6 行写入内容when i==3。我尚未对此进行测试,但请尝试使用lnr.setLineNumber(4)并摆脱您的 for 循环。

于 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 之间输入。但是现在程序在第 4 行添加行,但现在我们可以看到 mandar.txt 如下

 1

 2
 4
 3
 5

如何确保任何时间是否有 3 和 5 在任何行号然后我的字符串在它们之间输入? 意味着我将在程序 1 中获得 2 种方式。行号 2。行内容安全地插入应该插入的位置。

于 2013-03-26T06:09:05.893 回答