A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴振良 黑马帝   /  2012-3-30 20:02  /  2512 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戴振良 于 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);这句有问题?

7 个回复

倒序浏览
yocean 发表于 2012-3-30 20:10
int len = rdf.read(buf);返回的结果是-1, 因为读到数据末尾了。

为什么是返回-1呢?求解,谢谢!
回复 使用道具 举报
      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抛出。
回复 使用道具 举报

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));

        }

}
像是不能是同一对象
回复 使用道具 举报
yocean 发表于 2012-3-30 21:07
你用同一个流读取和写入了,RandomAccessFile进行读写操作时都是根据指针进行定位的,前面你写入数据以后 ...

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

public class IOQuestion


您这个我试了是可以的,但您说的不完全对,真正的原因是“报纸”那楼说的那样,我试了,正确!您得感谢我,又学了一招,哈哈!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马