如题:通过Java将字符内容写入到文件中,但是需要在文件的指定位置,所谓的指定位置就是:提前会在文件中添加一个开始标记和一个结束标记,然后要求将内容写入到这两个标记之间。
我的思路是,按行读取文件,找到位置后,开始写入,但现在的问题是,输入流获取的文件位置,能否传递给输出流?当然我也不确定这种方式是可行的,希望大家能给个说法。。。感激不尽!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
RandomAccessFile 插入写示例:
/**
*
* @param skip 跳过多少过字节进行插入数据
* @param str 要插入的字符串
* @param fileName 文件路径
*/
public static void beiju(long skip, String str, String fileName){
try {
RandomAccessFile raf = new RandomAccessFile(fileName,"rw");
if(skip < 0 || skip > raf.length()){
System.out.println("跳过字节数无效");
return;
}
byte[] b = str.getBytes();
raf.setLength(raf.length() + b.length);
for(long i = raf.length() - 1; i > b.length + skip - 1; i--){
raf.seek(i - b.length);
byte temp = raf.readByte();
raf.seek(i);
raf.writeByte(temp);
}
raf.seek(skip);
raf.write(b);
raf.close();
} catch (Exception e) {
e.printStackTrace();
}
} from:
http://blog.csdn.net/akon_vm/article/details/7429245
######回复
@雅典娜拉 : 你可以获取到你设置的开始标记跟结束标记的索引吧。这样还不行???######你提供的解决思路需要有一个前提就是:需要知道应该实现跳过的字节数。。。而这个字节数的获取我想也是比较麻烦的,不过还是很感谢!######思路来了:首先将文件内容按行读出来(当然,前提是文件不会太大...),然后在在内存中生成新的内容后写入文件..######嗯,您这种思路也挺好的,多谢指点######你可以考虑一边读一边输出为一个临时文件里面,最后renameTo过去,这样即使文件很大,内存损耗也比较小,最多就是多花点时间。######
使用 velocity .
Properties p = new Properties();
p.put(RuntimeConstants.RESOURCE_LOADER, "file");
// filename.txt 文件所在的目錄
p.put(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, "path/to/directory");
Velocity.init(p);
// 文件中有個 $!{remark} 標記要被替換
Template template = Velocity.getTemplate("filename.txt");
// 對應 filename.txt 中的 $!{remark}
VelocityContext context = new VelocityContext();
context.put("remark", "Hello!");
template.merge(context, new BufferedWriter(new OutputStreamWriter(new FileOutputStream("path/to/output.txt"), "UTF-8")));