如何将数据写入文件Java中的特定行号

时间:2013-01-05 13:57:21

标签: java eclipse file

标题:将数据写入文件中的特定行号

这是我的示例文件:

public class MyC{
    public void MyMethod()
    {
        System.out.println("My method has been accessed");
        Syst.out.println("hi");
        String l;
        nt x=0;
    }
}

我的目标是什么?

我想转到第5行并更正字符串Syst.out.println(“hi”);到System.out.println(“hi”); 直到现在我已经能够访问有错误的行并将字符串保存在变量中并替换错误。

这是我到目前为止所取得的成就:

import java.io.*;
public class NewReplaceLine {
    public static void main(String[] args)
    {
        FileInputStream fs = null;
        try {
            fs = new FileInputStream("C:\\Users\\workspace\\Compilers\\testfile.txt");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
           e.printStackTrace();
        }
        BufferedReader br = new BufferedReader(new InputStreamReader(fs));
        for(int i = 0; i < 6; ++i)
            try {
                br.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        try {
        String lineIWant = br.readLine();
        String newtext = lineIWant.replace("Syst", "System");
        System.out.println(newtext);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

我无法做的是将我更正的字符串重写为第5行到文件。 感谢

3 个答案:

答案 0 :(得分:1)

您需要写入第二个临时文件,因为您仍在阅读第一个临时文件。替换完成后文件完全写出,删除第一个文件并重命名第二个文件。

编辑:

根据您的评论,如果您想对文件内容进行多项或更复杂的更改,您可以将任务分解为以下步骤:

  • 使用FileInputStream将原始文件的内容作为输入流
  • 读取
  • 不是将输入流包装在BufferedReader中,而是读取输入流的内容并将它们写入ByteArrayOutputStream(一个充当输出流的文件,但将内容保存为内存为字节数组)
  • 使用字节数组构造一个新字符串作为构造函数参数
  • 现在你的内存中有一个字符串,其中包含原始文件的全部内容
  • 对该字符串进行更改后,使用FileWriter将其写入第二个文件
  • 使用File类删除原始文件,然后再次重命名输出文件

答案 1 :(得分:1)

(除非某些第三方图书馆这样做),你不能这样做(不仅用Java而且用其他语言)。

您可以按顺序或随机访问来读取/写入文件,但随机访问适用于字节而不适用于行(FS不知道您的文件是否包含文本或二进制数据)。并且,如果您找到正确的字节并在那里覆盖,如果您添加原始行中的更多字节,您将覆盖新的字节。

我将使用的选项是按顺序读取并复制到新文件(负责在正确位置写入新行)并关闭这两个文件。之后,用新文件覆盖旧文件。

答案 2 :(得分:0)

@Chris Gerken 如果文件有更多的错误怎么办,让我们说第2,4,5,6,7行他需要找到一种方法,一个接一个地顺序写入每一行(在处理了有错误的行之后)到新创建的文件?