首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

Java文件随机读取有关问题~

2013-07-09 
Java文件随机读取问题~~~~~急!!!在线等很久没弄文件随机读取了,这回遇到需求,好了 不啰嗦 直接上代码:没有

Java文件随机读取问题~~~~~急!!!在线等
很久没弄文件随机读取了,这回遇到需求,好了 不啰嗦 直接上代码:


没有输出任何东西,如果设置skipBytes(0);就能输出了,
不知道这是什么问题?该如何解决才好呢? Java 文件随机读取 RandomAccessFile skipBytes
[解决办法]
跳过中文是把?

        RandomAccessFile randomAccessFile;
        try
        {
            randomAccessFile = new RandomAccessFile("RandomAccess.txt", "rw");
            //设置文件的内容为0字节
            randomAccessFile.setLength(0);
            //循环写入
            String loveStr = "我爱你!i love you!";
            byte[] bArr = loveStr.getBytes();
            for (int i = 0; i < 5; i++)
            {


                randomAccessFile.write(bArr);
            }
            System.out.println("=>" + randomAccessFile.getFilePointer());
            // 重新把文件指针定位到开始处
            randomAccessFile.seek(0);
            System.out.println("=>" + randomAccessFile.getFilePointer());
            //跳过中文?
            byte[] zhByte = "我爱你!".getBytes();
            randomAccessFile.skipBytes(zhByte.length);
            System.out.println("=>" + randomAccessFile.getFilePointer());
            byte[] data = new byte[bArr.length - zhByte.length];
            while ((randomAccessFile.read(data)) != -1)
            {
                String str = new String(data,"GBK");
                System.out.println(str);
                randomAccessFile.skipBytes(zhByte.length);
            }
        }
        catch (FileNotFoundException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


------解决方案--------------------


引用:
Quote: 引用:

跳过中文是把?

        RandomAccessFile randomAccessFile;
        try
        {
            randomAccessFile = new RandomAccessFile("RandomAccess.txt", "rw");
            //设置文件的内容为0字节
            randomAccessFile.setLength(0);
            //循环写入
            String loveStr = "我爱你!i love you!";
            byte[] bArr = loveStr.getBytes();
            for (int i = 0; i < 5; i++)
            {
                randomAccessFile.write(bArr);
            }
            System.out.println("=>" + randomAccessFile.getFilePointer());
            // 重新把文件指针定位到开始处
            randomAccessFile.seek(0);
            System.out.println("=>" + randomAccessFile.getFilePointer());
            //跳过中文?
            byte[] zhByte = "我爱你!".getBytes();
            randomAccessFile.skipBytes(zhByte.length);
            System.out.println("=>" + randomAccessFile.getFilePointer());
            byte[] data = new byte[bArr.length - zhByte.length];
            while ((randomAccessFile.read(data)) != -1)
            {
                String str = new String(data,"GBK");
                System.out.println(str);


                randomAccessFile.skipBytes(zhByte.length);
            }
        }
        catch (FileNotFoundException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



对了,这个方法是可行的;
后面我又换了方式用这个代码测试了下;
就是把写入的部分注释掉,
即:
// randomAccessFile.write(bArr);
意思就是不在程序中写入,而是直接到txt记事本中去手动写进去,如图:
Java文件随机读取有关问题~
然后再把读取模式由rw 改为只读取 r ;
这个时候运行会出现个错误:
java.io.IOException: 拒绝访问。
当再把模式改为rw才可以操作,
只是改为rw,运行一次后控制台没有输出跳过汉字后剩下的数据,当然也没有报错,而且还会把txt里面的数据都删掉,变成空白了!
这个是什么原因呢?


你改为只读模式了,就不能再使用setLength方法了,你把setLength(0)执行,就等于把内容都请空了。

热点排行