import java.io.*;
class Point
{
private int x;
private int y;

public Point(int x,int y)              /////构造函数
{
this.x=x;this.y=y;
}
public String toString()
{
return "["+x+","+y+"]";            /////以该格式输出坐标
}
public void writePoint(RandomAccessFile f)throws IOException
{                            ////////在当前位置写点(x,y)对象
f.writeInt(x);
f.writeInt(y);
}
public void writePoint(RandomAccessFile f,int n)throws IOException
{                            ///////方法重载,移到第n个点的位置
f.seek(n*8);               
f.writeInt(x);
f.writeInt(y);
}
public static Point readPoint(RandomAccessFile f)throws IOException
{                             ////////在当前位置读点对象
int x=f.readInt();
int y=f.readInt();
return new Point(x,y);
}
public static Point readPoint(RandomAccessFile f,int n)throws IOException
{                             ////////日,又是重载,读n点位置
f.seek(n*8);
int x=f.readInt();
int y=f.readInt();
return new Point(x,y);
}
}
public class Ex_RandomPointRW
{
public static void main(String[] args)throws Exception
{
Point pt;
RandomAccessFile raf=new RandomAccessFile("c:/t1.dat","rw");
for(int i=0;i<10;i++)
{
pt=new Point(i,i);
pt.writePoint(raf);
System.out.print(" "+pt);
}
System.out.println();
raf.close();
RandomAccessFile raf1=new RandomAccessFile("c:/t1,dat","rw");
                           /////// 修改第3个点的对象值
pt=new Point(300,300);
pt.writePoint(raf1,3);
                            ///////修改第5个点的对象值
pt=new Point(500,500);
pt.writePoint(raf1,5);
raf1.close();
                             /////验证是否已修改
RandomAccessFile raf2=new RandomAccessFile("c:/t1,dat","r");
for(int i=0;i<10;i++)
{
pt=Point.readPoint(raf2);
System.out.print(" "+pt);
}
System.out.println();
raf.close();
}
}
-----------------------------------------------------------
///////////////编译是成功的  我想改变指定点的坐标值  但是输出后指定点的坐标虽然改变了 
///////////////但是其他点的坐标也在乱变```````

解决方案 »

  1.   

    我把上面的问题重新编了个简单点的```还是一样````数值乱变`````
    import java.io.*;
    public class Ex_RandomRW
    {
    public static void main(String[] args)throws Exception
    {
    RandomAccessFile raf=new RandomAccessFile("c:/t.dat","rw");
    final int DOUBLE_SIZE=8;
    for(int i=0;i<10;i++)                /////写入10个Double数值
    {
    raf.write(i);
    System.out.print(" "+(double)i);
    }
    System.out.println();
    raf.close();
    RandomAccessFile raf1=new RandomAccessFile("c:/t.dat","rw");
                                      //////////修改第3个double值
    raf1.seek(3*DOUBLE_SIZE);
    raf1.writeDouble(300);
                              //////////修改第5个double值
    raf1.seek(5*DOUBLE_SIZE);
    raf1.writeDouble(500);
    raf1.close();
                                      ///////////验证是否有效
    RandomAccessFile raf2=new RandomAccessFile("c:/t.dat","r");
    for(int i=0;i<10;i++)
    {
    System.out.print(" "+raf2.readDouble());
    }
    System.out.println();
    raf2.close();
    }
    }