随机访问文件RandomAccessFile

img


public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
RandomAccessFile rf =new RandomAccessFile("D:/Primenumber.txt","rw");
for(int n=2;n<=100;n++){
boolean flag=true;
for(int i=2;i<n;i++){
if(n%i==0){
flag=false;
break;
}
}
if(flag==true){
rf.writeInt(n);
}
}
rf.seek(5);
System.out.println(rf.readInt());
rf.close();

    for(int n=100;n<=500;n++){
        boolean flag=true;
        for(int i=2;i<n;i++){
            if(n%i==0){
                flag=false;
                break;
        }
        }
        if(flag==true){
            rf.seek(rf.length());
            rf.writeInt(n);
        }
    }
}

}
我的疑问:
1.读出第五个素数不是把文件指针定位到5吗?可我读出来时却不是素数
2.100到500的素数如何追加进去?
3.请用通俗易懂的词语,不要用专业术语,我还是个刚学Java的学生

输出第5个素数,要先从文件中读取到第5个素数,然后输出,所以首先要先把2-100的素数输入到文件,下面使用的是writeInt()方法写入一个Int和readInt()方法读入一个int,所以素数文本文件不能直接打开直接看出有哪些素数,必须使用代码来看,修改如下:


public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        
        //写入2-100的素数
        RandomAccessFile rf =new RandomAccessFile("f:\\Primenumber.txt","rw");        
         for(int n=2;n<=100;n++){
                boolean flag=true;
                for(int i=2;i<n;i++){
                    if(n%i==0){
                        flag=false;
                        break;
                }
                }
                if(flag==true){
                    rf.writeInt(n);
                }
            }
         
         rf.close();
         
        //执行题目内容 
        rf =new RandomAccessFile("f:\\Primenumber.txt","rw");         
        int j =0;
        int result  ;
        try {
            
            while(true) {
                result = rf.readInt();
                j++;
                if(j==5) {  //打印第5个素数
                    System.out.println(result);
                }
            }
            
        }catch(EOFException e) {  //发生这个异常,正常情况是读取到文件结尾了,所以可以在这时追加100-500的素数
            //追加100-500的素数
             for(int n=100;n<=500;n++){
                    boolean flag=true;
                    for(int i=2;i<n;i++){
                        if(n%i==0){
                            flag=false;
                            break;
                    }
                    }
                    if(flag==true){
                        rf.writeInt(n);
                    }
                }
        }
        
        
        
    
    
           
            
            rf.close();
        }