黑马程序员技术交流社区

标题: 关于RandomAccessFile类的问题 [打印本页]

作者: 戴振良    时间: 2012-3-30 20:02
标题: 关于RandomAccessFile类的问题
本帖最后由 戴振良 于 2012-3-30 20:44 编辑

代码功能,把"daizhenliang"写入abc.txt,然后再从abc.txt中读取出来
  1. import java.io.RandomAccessFile;
  2. public class Test
  3. {       
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 RandomAccessFile rdf = new RandomAccessFile("abc.txt","rw");
  7.                 rdf.write("daizhenliang".getBytes());
  8.                                
  9.                 byte [] buf = new byte[12];
  10.                 int len = rdf.read(buf);
  11.                 System.out.println(new String(buf,0,len));
  12.         }
  13. }
复制代码
运行时出现如下异常:


我查看过abc.txt,内容是全写进去了,应该就是读的问题了,看那抛出来的异常是说我字符串下标越界呀,我写入的内容是12个字符呀,难道说:int len = rdf.read(buf);这句有问题?
作者: 戴振良    时间: 2012-3-30 20:46
yocean 发表于 2012-3-30 20:10
int len = rdf.read(buf);返回的结果是-1, 因为读到数据末尾了。

为什么是返回-1呢?求解,谢谢!
作者: 何万县    时间: 2012-3-30 20:54
      System.out.println(new String(buf,0,len));
应该是len-1
StringIndexOutOfBoundException将会在数组下标超出其分配的index大小的时候抛出,比如:int[]a=int [5];
System.out.println(a[5]);
这样就抛出StringIndexOutOfBoundException异常。
StringIndexOutOfBoundException是一个runtime erro,有java tm抛出。
作者: yangshang1    时间: 2012-3-30 21:08

import java.io.RandomAccessFile;

public class IOQuestion

{        
        public static void main(String[] args) throws Exception

        {
                    int a=0;
                RandomAccessFile rdf = new RandomAccessFile("abc.txt","rw");

                rdf.write("daizhenliang".getBytes());
                RandomAccessFile rdf1 = new RandomAccessFile("abc.txt","rw");
               
                                
                byte [] buf = new byte[12];

                int len = rdf1.read(buf);
                // System.out.println(len);
                // System.out.println(buf);
               
                System.out.println(new String(buf,0,buf.length-1));

        }

}
像是不能是同一对象
作者: 戴振良    时间: 2012-3-30 21:46
yocean 发表于 2012-3-30 21:07
你用同一个流读取和写入了,RandomAccessFile进行读写操作时都是根据指针进行定位的,前面你写入数据以后 ...

这是对的,要的就是这样的答案,告诉我数组下标超出范围有对我没有什么用,告诉我这个才是真正有用的,建议老师应该给你加技术分!:lol
作者: 戴振良    时间: 2012-3-30 21:49
本帖最后由 戴振良 于 2012-3-30 21:50 编辑
yangshang1 发表于 2012-3-30 21:08
import java.io.RandomAccessFile;

public class IOQuestion


您这个我试了是可以的,但您说的不完全对,真正的原因是“报纸”那楼说的那样,我试了,正确!您得感谢我,又学了一招,哈哈!




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