如何将txt文件放置到第二个txt文件的特定行

时间:2019-08-15 07:31:38

标签: java bufferedreader filewriter

我有2个文件,一个是new.txt,第二个是template.txt 我需要将new.txt放到template.txt的6行中,但不知道该怎么做。 让我们向您展示我已经拥有的东西!

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        File dir = new File(".");

        String source = dir.getCanonicalPath() + File.separator + "new.txt";
        String dest = dir.getCanonicalPath() + File.separator + "template.txt";

        File fin = new File(source);
        FileInputStream fis = new FileInputStream(fin);
        BufferedReader in = new BufferedReader(new InputStreamReader(fis));

        FileWriter fstream = new FileWriter(dest,true);
        BufferedWriter out = new BufferedWriter(fstream);

        String aLine = null;
        while((aLine = in.readLine()) != null){
            out.write(aLine);
            out.newLine();
        }
        in.close();
        out.close();
    }
}

2 个答案:

答案 0 :(得分:4)

文件没有“插入”操作。您不能简单地在文件中间写入内容。写入以给定的偏移量发生,并且它们会覆盖已经存在的任何内容。

因此,您需要创建一个临时文件,将new.txt的1-5行复制到其中。然后,从模板中写入第6行,然后是new.txt的其余部分。完成后,删除new.txt并将临时文件重命名为new.txt

如果保证文件a很小,则可以用内存缓冲区替换临时文件。

答案 1 :(得分:0)

上面要注释的伪代码:

File fileOne = new File("new.txt");
File fileTwo = new File("template.txt");

List<String> listOne = new ArrayList<String>();
List<String> listTwo = new ArrayList<String>();

String s = "";

while((s = fileOne.readLine()) != null){
  listOne.add(s);
}

for(int i = 0; i < listOne.size(); i++){
  if(i == 5){
    String s2 = "";
    while((s2 = fileTwo.readLine()) != null){
      listTwo.add(s);
    }
  }
  listTwo.add(listOne.get(i));
}

就像我说的那样,这只是伪代码,所以可能不起作用,但这对您来说是个好习惯。希望您了解其背后的想法。

PS。当然,这样做之后,您必须将listTwo中的所有数据写入所需的文件。