如何将字符附加到文件某些"字符串"在java中

时间:2016-06-24 08:08:58

标签: java string java.util.scanner filewriter

File filename =new File("D:/text.txt");

final Scanner scanner = new Scanner(filename);
while (scanner.hasNextLine()) {
    final String lineFromFile = scanner.nextLine();

    if(lineFromFile.contains("-----END CERTIFICATE REQUEST-----") ) { 
        FileWriter fw = new FileWriter(filename,true); //the true will append the new data

        fw.append(",");
        fw.write("wirte123");//appends the string to the file
        fw.close();

        System.out.println("I found "  +filename.getName());
        break;
     }
}

但对我来说,它是在新线之后添加....如下所示 enter image description here

需要输出文件如下 enter image description here

2 个答案:

答案 0 :(得分:2)

原始文件已包含结束新行。因此,如果附加到原始文件中,它将在该新行之后写入。

更糟糕的是,Scanner是一个高级对象,它不允许您知道文件中可以定位内部游标的确切位置,因为在内部它会读取大缓冲区(对于证书文件,可能会立即读取整个文件。)

因此,您应该使用RandomAccessFile及其关联的FileChannel来记录每行开头的位置,并在可能的行尾之前截断文件。

代码可能变成:

    RandomAccessFile fw = new RandomAccessFile(filename, "rw");
    FileChannel fc = fw.getChannel();
    long oldpos;
    while (true) {
        oldpos = fc.position();
        final String lineFromFile = fw.readLine();

        if (lineFromFile.contains("-----END CERTIFICATE REQUEST-----")) {
            System.out.println("I found "  +filename.getName());*/
            fc.truncate(oldpos + lineFromFile.length());
            fw.writeBytes(",wirte123");//appends the string to the file
            break;
        }
    }
    fw.close();

答案 1 :(得分:0)

您可以将Bufferwriter与fileWriter一起使用,并使用缓冲区编写器的append方法,它将附加到文本而不是创建新行。

E.g。

 File filename = new File("D:/text.txt");
 FileWriter fileWritter = new FileWriter(filename,true);
 BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
 bufferWritter.append(",wirte123");
 bufferWritter.close();
 fileWritter.close();