有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

是否试图通过java程序在文本文件的特定行之间添加行(字符串数组)?

我试图通过各种论坛来编写程序。 程序如下,目的是在现有txt文件的第三行之后,但在第五行之前添加行&;当我将看到这个程序的执行完成时,我试图安全地保留前面的行,但我没能进入3&;5.添加到第五行以下。 如果这个基本程序可以运行,那么我将尝试在文件的第3行和第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();  
    }  
}  
    }  

}

请帮帮我。我没有得到任何线索或想法


共 (2) 个答案

  1. # 1 楼答案

    您正在使用lnr.setLineNumber(6)lnr设置为写入第6行。你的for循环只是从1循环到6,并在i==3时将内容写入第6行。我还没有测试过这个,但是试着使用lnr.setLineNumber(4)并摆脱for循环

  2. # 2 楼答案

    谢谢你, 我用你的方式尝试了我的场景,如下所示

    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文件中看到了一个新问题。在运行上述程序之前,预期如下所示

    1
    2
    3
    
    5
    

    要是曼达呢。txt在运行上述程序之前进行了如下修改:-

    1
    
    2
    3
    5
    

    表示现在空行更改为介于1和;但是我们(人类)知道字符串“4”应该在3和;5.但现在程序在第4行添加行,但现在我们可以看到mandar。txt格式如下

     1
    
     2
     4
     3
     5
    

    如何在任何时候确保;5在任何行号,然后我的字符串在它们之间输入 意味着我将在程序中获得两种方式 1.线路号 2.在应插入的位置安全插入行内容