开发者社区> 问答> 正文

Java 在文件中指定位置插入字符:报错

如题:通过Java将字符内容写入到文件中,但是需要在文件的指定位置,所谓的指定位置就是:提前会在文件中添加一个开始标记和一个结束标记,然后要求将内容写入到这两个标记之间。

我的思路是,按行读取文件,找到位置后,开始写入,但现在的问题是,输入流获取的文件位置,能否传递给输出流?当然我也不确定这种方式是可行的,希望大家能给个说法。。。感激不尽!

展开
收起
kun坤 2020-06-07 22:04:53 843 0
1 条回答
写回答
取消 提交回答
  • 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")));

    2020-06-07 22:04:58
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载