黑马程序员技术交流社区

标题: 在文本中插入数据 [打印本页]

作者: 许冉    时间: 2011-9-25 19:34
标题: 在文本中插入数据
IO视频中的例子对文件的操作
不是覆盖就是续写
要是想在文本某个位置插入一些数据,原来的数据自动后移,怎么弄
茫茫api,用过的赐教一下
作者: 匿名    时间: 2011-9-25 22:29
搞了半天没搞出来
作者: 梁锡伟    时间: 2011-9-26 01:46
有个类叫RandomAccessFile.支持你说的操作
作者: 何德虎    时间: 2011-9-26 08:59
你说的那是追加文件内容,主要的技术要点如下:
1、通过RandomAccessFile以读写的方式打开文件输出流,使用它的seek方法可以将读写指针移到文件尾,再使用它的write方法将数据写到读写指针后面,完成文件的追加。
2、通过FileWriter打开文件输出流,构造FileWriter时指定写入模式,是一个布尔值,为true时表示写入的内容添加到已有的文件内容后面,为false时重新写文件,以前的数据被清空,默认为false,
范例如下:[code=java]package com.zf.s10;//创建一个包
import java.io.FileWriter;//引入类
import java.io.IOException;
import java.io.RandomAccessFile;
public class TextSuperaddition {//将内容追加到文件尾部
        //使用RandomAccessFile对象实现内容追加
        public static void addFirst(String fileName){
                try {
                        // 打开一个随机访问文件流,按读写方式
                        RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
                        long fileLength = randomFile.length();//获得文件字节数
                        randomFile.seek(fileLength);//将写文件指针移到文件尾。
                        String content="\nIf you would know the value of money, go and try to borrow some.\n" +
                                        "要想知道钱的价值,就想办法去借钱试试。\n";
                        randomFile.write(content.getBytes("gb2312"));//内容写到文件内容尾部
                        randomFile.close();
                } catch (IOException e) {//捕获异常
                        e.printStackTrace();
                }
        }
        //使用FileWriter对象实现内容追加
        public static void addSecond(String fileName){
                try {
                        //打开一个写文件器,true表示以追加形式写文件
                        FileWriter writer = new FileWriter(fileName, true);
                        String content="That man is the richest whose pleasure are the cheapest. \n"+
                                        "能处处寻求快乐的人才是最富有的人。\n";
                        writer.write(content);//内容写到文件内容尾部
                        writer.close();
                } catch (IOException e) {//捕获异常
                        e.printStackTrace();
                }
        }
        public static void main(String[] args) {//java程序主入口处
                String fileName = "F:/poem.txt";
                System.out.println("1.RandomAccessFile对象实现内容追加:");
                addFirst(fileName);//调用方法1
                System.out.println("2.FileWriter对象实现内容追加:");
                addSecond(fileName);//调用方法2
                System.out.println("追后后文件内容显示:");
                TextReadFile.readFileByLines(fileName);//调用TextReadFile类的按行读取文件方法
        }
}[/code]
[ 本帖最后由 何德虎 于 2011-09-26  09:02 编辑 ]
作者: 匿名    时间: 2011-9-26 10:34
标题: 回复 板凳 的帖子
你说的文件的追加就是把数据写到文件的末尾
我是想在文件的中间某个位置插入一些数据
就像我们输入的时候,光标移动文本中间,写点东西,光标后面的数据自动后移
这个怎么弄
作者: 何德虎    时间: 2011-9-26 12:53
文件位置的指针默认位于文件的开头处,通过seek()方法来设置文件指针位置,通过getFilePointer()方法可以获得文件位置指针的位置,然后剩余的不用我再说了吧..................
我还是说一下吧,我的意思就是让你用seek(long pos)这个方法来移动指针,参数pos表示从文件开头以字节为单位测量的偏移量位置,然后用write(int b)方法将数据写到读写指针后面,完成文件的追加,参数b表示要写入的byte
[ 本帖最后由 何德虎 于 2011-09-26  12:59 编辑 ]




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2