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;
}
}
答案 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();