写入Java中的特定行?

时间:2014-10-23 20:07:25

标签: java file text printing writing

为了澄清我的问题,我正在写一个位于我的计算机上的文本文件,其中已有文本内容。下面的代码写入文本文件而不删除任何内容但现在我想指定它写入的行。目前它有一个if语句来捕捉“'完成”这个词。存在于行内,它被识别,因为它写入文件。我的问题是试图让它写入说“完成”的行。它写到底部,最后一行代码。我该如何解决这个问题?

方法readNumLines是文件中包含的行数。阅读是文本文件名。

int i = 0;
    BufferedReader reader = new BufferedReader(new FileReader(path+reading));
    BufferedWriter writer = new BufferedWriter(new FileWriter(path+reading, true));
    String line = null;
    while ((line = reader.readLine()) != null && i < readNumLines(reading)-1) {
        if(line.contains("Done")){
            writer.write("\nCHECK!\n");
            writer.close();
        }
        i++;
    }

3 个答案:

答案 0 :(得分:1)

我建议将整个文件读入变量(字符串,数组或列表)。您可以轻松修改特定行,然后将所有内容写回文件。

1)将文件读入数组: Store text file content line by line into array

2)操纵数组:

for (int i = 0; i < lines.length; i++) {
            String line = lines[i];
            if (line.contains("Done")) {
                lines[i] = line + "\nCHECK!\n";
                break;
            }
}

3)将字符串数组写入文件: Writing a string array to file using Java - separate lines

问题也与这一行有关:

writer.write("\nCHECK!\n");

第一个&#34; \ n&#34;强迫&#34;检查&#34;写在一个新的行。这假设你的&#34;完成&#34; line是最后一行,并不以&#34; \ n&#34;。

结尾

答案 1 :(得分:0)

这是我的方法。想法很简单,将包括新行的所有内容写入临时文件,然后将临时文件重命名为原始文件并删除原始文件。注意:我从我的一个项目中删除了这段代码,因此我可能忘了改变一些东西。所以,如果它没有工作让我知道,我会看看。希望这会有所帮助:)

            String line;//You need to specify those
            File infile;

            // temp file
            File outFile = new File("$$$$$$$$.tmp");

            // input
            FileInputStream fis = null;
            try {
                fis = new FileInputStream(inFile);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            BufferedReader in = new BufferedReader(new InputStreamReader(fis));

            // output         
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(outFile);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            PrintWriter out = new PrintWriter(fos);
            String thisLine = "";
            int i =1;
            try {
                while ((thisLine = in.readLine()) != null) {
                   if(in.contains("Done"))//the check for done 
                       out.println(line);                  
                   }
                   out.println(thisLine);
                   i++;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            out.flush();
            out.close();
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            inFile.delete();
            outFile.renameTo(inFile);

答案 2 :(得分:0)

使用 Java 8 时,您可以尝试这样做:

final Path myFile = Paths.get("path\\to\\yourFile.txt");
final int lineNumWhereToInsert = 2;
final String stringToInsert = "insertion test";

try {
    final List<String> lines = Files.lines(myFile).collect(Collectors.toList());
    lines.add(Math.min(lineNumWhereToInsert, lines.size()), stringToInsert);

    try (final BufferedWriter out = Files.newBufferedWriter(myFile, Charset.forName("UTF-8"))) {
        for (final String line : lines) {
            out.append(line).append(System.lineSeparator());
        }
    }
} catch (IOException) {
    ex.printStrackTrace();
}