使用随机访问流读出文本文件最后n个字符,文本文件名和数字n用命令行参数的方式提供。
代码如下:
import java.io.* ;
public class shiyan44{
public static void main(String args[])throws Exception{
 String filename,s,t;
 int n=0;
 long leng,filepoint; //注意这里定义为长整型
 RandomAccessFile file=new RandomAccessFile ("shiyan44.java","r");   //创建随机文件读写对象
 leng=file.length();
 t=args[1];
//以下循环语句完成将从命令行接受到的数字字符转换成为整数类型
for(int i=0;i<t.length();i++){
  n=10*n+(int)(t.charAt(i)-48);
   }
 file.skipBytes((int)(leng-n));
 //将文件指针向前移动到最后n个字符,请注意这里为何要将长整形转换为整型类型
 filepoint=file.getFilePointer();
 while(filepoint<leng){
   s= file.readLine();   //读出内容并赋值给变量s
   System.out.println(s);
   filepoint=file.getFilePointer(); 
 } 
 file.close();
}
}
我编译没错 就是感觉不能运行 新手多多指教

解决方案 »

  1.   

    楼主说的和程序中有点不一样,楼主在参数中只指定了数字n,所以 t=args[1];应改为 t=args[0];不然就是数字越界异常。
      

  2.   


    另外,字符转换成整数可以这样的  n = Integer.parseInt(t);
      

  3.   


        public static void main(String args[]) throws Exception {
            String filename, s, t;
            filename = args[0];
            int n = 0;
            long leng, filepoint; //注意这里定义为长整型
            RandomAccessFile file = new RandomAccessFile(filename, "r"); //创建随机文件读写对象
            leng = file.length();
            t = args[1];
            //以下循环语句完成将从命令行接受到的数字字符转换成为整数类型
            for (int i = 0; i < t.length(); i++) {
                n = 10 * n + (int) (t.charAt(i) - 48);
            }
            file.skipBytes((int) (leng - n));
            //将文件指针向前移动到最后n个字符,请注意这里为何要将长整形转换为整型类型
            filepoint = file.getFilePointer();
            while (filepoint < leng) {
                s = file.readLine(); //读出内容并赋值给变量s
                System.out.println("length:" + s.length());
                System.out.println(s);
                filepoint = file.getFilePointer();
            }
            file.close();
        }程序应该没有错,简单的修改了一下,文件名修改成参数了,运行时输入两个参数本文件的文件名,和长度10length:1
    ;
    length:5
        }
    length:1
    }
    从运行结果看,程序读出了最后的3行,如果加下每行最后的回车符,2+6+2刚好等于10.
    另外汗一下那个将字符串转成数字的for循环,可以用Integer.parseInt(t);替换
      

  4.   

    我会了 呵呵!
    RandomAccessFile file=new RandomAccessFile ("shiyan44.java","r"); 这边错了
    ("shiyan44.java","r"); 改成("xx.txt","r");