java 的IO小问题,有关于RandomAccessFile随机读取的问题。
这道题难了我一天了,我到现在脑袋都想破了,都没想到有什么解决的好办法题意是创建10个点坐标,写入文件info.txt中,然后随机修改任意一个点的坐标,并显示在屏幕上。运行...
这道题难了我一天了,我到现在脑袋都想破了,都没想到有什么解决的好办法
题意是创建10个点坐标,写入文件info.txt中,然后随机修改任意一个点的坐标,并显示在屏幕上。运行后大概就是这样子:
[0,0] [1,1] [2,2] [3,3] [4,4] [5,5] [6,6] [7,7] [8,8] [9,9]
0,0] [1,1] [2,2] [30,30] [4,4] [50,50] [6,6] [7,7] [8,8] [9,9]
我编写的代码如下:import java.io.*;
import java.util.*;
class Point implements Serializable{//新建一个Point类
int a,b;
public Point(int x,int y){
a=x;
b=y;
}
}
public class TestPoint {
public TestPoint(){
Point p[]=new Point[10];
for(int i=0;i<10;i++){
p[i]=new Point(i,i);
}
try{
RandomAccessFile ra=new RandomAccessFile("info.txt","rw");
//将对象数组数据写入
for(int i=0;i<10;i++){
ra.writeInt(p[i].a);
ra.writeInt(p[i].b);
}
ra.close();
RandomAccessFile raf=new RandomAccessFile("info.txt","rw");
for(int i=0;i<10;i++){
System.out.print("["+raf.readInt()+","+raf.readInt()+"]"+" ");
}
raf.close();
}catch(IOException e){
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestPoint t=new TestPoint();
}
}
我是这样想的,利用util包里的Random类产生一个小于10的随机整数f
然后p[f]=new Point(30,30);
我不知道这样符合题意不,但是结果证明是错误的,我发现只有在写进去时ra还没有关闭时,才可以这么修改数据,否则是无法修改的,不好意思麻烦大家了,我最后的财富值都拿出来了(只剩下6点,还拿出5点来了) 展开
题意是创建10个点坐标,写入文件info.txt中,然后随机修改任意一个点的坐标,并显示在屏幕上。运行后大概就是这样子:
[0,0] [1,1] [2,2] [3,3] [4,4] [5,5] [6,6] [7,7] [8,8] [9,9]
0,0] [1,1] [2,2] [30,30] [4,4] [50,50] [6,6] [7,7] [8,8] [9,9]
我编写的代码如下:import java.io.*;
import java.util.*;
class Point implements Serializable{//新建一个Point类
int a,b;
public Point(int x,int y){
a=x;
b=y;
}
}
public class TestPoint {
public TestPoint(){
Point p[]=new Point[10];
for(int i=0;i<10;i++){
p[i]=new Point(i,i);
}
try{
RandomAccessFile ra=new RandomAccessFile("info.txt","rw");
//将对象数组数据写入
for(int i=0;i<10;i++){
ra.writeInt(p[i].a);
ra.writeInt(p[i].b);
}
ra.close();
RandomAccessFile raf=new RandomAccessFile("info.txt","rw");
for(int i=0;i<10;i++){
System.out.print("["+raf.readInt()+","+raf.readInt()+"]"+" ");
}
raf.close();
}catch(IOException e){
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestPoint t=new TestPoint();
}
}
我是这样想的,利用util包里的Random类产生一个小于10的随机整数f
然后p[f]=new Point(30,30);
我不知道这样符合题意不,但是结果证明是错误的,我发现只有在写进去时ra还没有关闭时,才可以这么修改数据,否则是无法修改的,不好意思麻烦大家了,我最后的财富值都拿出来了(只剩下6点,还拿出5点来了) 展开
2个回答
展开全部
我按照我的理解写了一个,你看看:
package package1;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.io.Serializable;
import java.util.Random;
import java.util.Scanner;
class Point implements Serializable{
int a;
int b;
public Point(int x,int y){
a=x;
b=y;
}
Point()
{
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
}
public class TestPoint {
public static int count = 0;
public TestPoint()
{
}
public void writeFile() throws IOException
{
File file= new File("info.txt");
if(!file.exists())
file.createNewFile();
//=new Point[10];
Point p = null;
Random random = new Random();
for(int i=1;i<=10;i++){
p= new Point(i,i);
}
try{
RandomAccessFile ra=new RandomAccessFile(file,"rw");
//将对象数组数据写入
for(int i=1;i<10;i++){
ra.writeInt(p.a);
ra.writeInt(p.b);
}
ra.close();
RandomAccessFile raf=new RandomAccessFile(file,"rw");
for(int i=0;i<10;i++){
System.out.println("["+raf.readInt()+","+raf.readInt()+"]"+" ");
}
raf.close();
}catch(IOException e){
e.printStackTrace();
}
}
public void changeFile() throws IOException{
File file= new File("info.txt");
RandomAccessFile ra=new RandomAccessFile(file,"rw");
if(!file.exists())
file.createNewFile();
Point p[]=new Point[11];
for(int i=1;i<10;i++){
p[i]=new Point(i,i);
}
for(int i=1;i<=10;i++){
ra.writeInt(p[i].a);
ra.writeInt(p[i].b);
}
readFile();
System.out.println("请输入10个坐标中你想要该改变的坐标:");
Scanner sc = new Scanner(System.in);
int k=sc.nextInt();
try{
long gf = 0;
gf=(k)*4;
ra.seek(gf);
System.out.println("所要改变的坐标为:");
System.out.println("["+ra.readInt()+","+ra.readInt()+"]");
System.out.println("输入要改变的两个坐标:");
p[k].a=sc.nextInt();
p[k].b=sc.nextInt();
gf=k*4;
//整形为4个内存
ra.seek(gf);
//讲ra定位在k处,
ra.writeInt(p[k].a);
ra.writeInt(p[k].b);
ra.close();
}catch(IOException e){
e.printStackTrace();
}
System.out.println("改变后,文件中的数据为:");
readFile();
}
public void readFile() throws IOException
{
File file= new File("info.txt");
if(!file.exists())
file.createNewFile();
/*try{
RandomAccessFile ra=new RandomAccessFile(file,"rw");
//将对象数组数据写入
for(int i=0;i<10;i++){
ra.writeInt(p[i].a);
ra.writeInt(p[i].b);
}
ra.close();
*/
RandomAccessFile raf=new RandomAccessFile(file,"rw");
System.out.println("文件中的坐标为:");
for(int i=1;i<10;i++){
System.out.println("第"+i+"个坐标为:"+"["+raf.readInt()+","+raf.readInt()+"]"+" ");
}
raf.close();
}/*catch(IOException e){
e.printStackTrace();
}
}*/
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
TestPoint t=new TestPoint();
//t.writeFile();
t.changeFile();
}
}
package package1;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.io.Serializable;
import java.util.Random;
import java.util.Scanner;
class Point implements Serializable{
int a;
int b;
public Point(int x,int y){
a=x;
b=y;
}
Point()
{
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
}
public class TestPoint {
public static int count = 0;
public TestPoint()
{
}
public void writeFile() throws IOException
{
File file= new File("info.txt");
if(!file.exists())
file.createNewFile();
//=new Point[10];
Point p = null;
Random random = new Random();
for(int i=1;i<=10;i++){
p= new Point(i,i);
}
try{
RandomAccessFile ra=new RandomAccessFile(file,"rw");
//将对象数组数据写入
for(int i=1;i<10;i++){
ra.writeInt(p.a);
ra.writeInt(p.b);
}
ra.close();
RandomAccessFile raf=new RandomAccessFile(file,"rw");
for(int i=0;i<10;i++){
System.out.println("["+raf.readInt()+","+raf.readInt()+"]"+" ");
}
raf.close();
}catch(IOException e){
e.printStackTrace();
}
}
public void changeFile() throws IOException{
File file= new File("info.txt");
RandomAccessFile ra=new RandomAccessFile(file,"rw");
if(!file.exists())
file.createNewFile();
Point p[]=new Point[11];
for(int i=1;i<10;i++){
p[i]=new Point(i,i);
}
for(int i=1;i<=10;i++){
ra.writeInt(p[i].a);
ra.writeInt(p[i].b);
}
readFile();
System.out.println("请输入10个坐标中你想要该改变的坐标:");
Scanner sc = new Scanner(System.in);
int k=sc.nextInt();
try{
long gf = 0;
gf=(k)*4;
ra.seek(gf);
System.out.println("所要改变的坐标为:");
System.out.println("["+ra.readInt()+","+ra.readInt()+"]");
System.out.println("输入要改变的两个坐标:");
p[k].a=sc.nextInt();
p[k].b=sc.nextInt();
gf=k*4;
//整形为4个内存
ra.seek(gf);
//讲ra定位在k处,
ra.writeInt(p[k].a);
ra.writeInt(p[k].b);
ra.close();
}catch(IOException e){
e.printStackTrace();
}
System.out.println("改变后,文件中的数据为:");
readFile();
}
public void readFile() throws IOException
{
File file= new File("info.txt");
if(!file.exists())
file.createNewFile();
/*try{
RandomAccessFile ra=new RandomAccessFile(file,"rw");
//将对象数组数据写入
for(int i=0;i<10;i++){
ra.writeInt(p[i].a);
ra.writeInt(p[i].b);
}
ra.close();
*/
RandomAccessFile raf=new RandomAccessFile(file,"rw");
System.out.println("文件中的坐标为:");
for(int i=1;i<10;i++){
System.out.println("第"+i+"个坐标为:"+"["+raf.readInt()+","+raf.readInt()+"]"+" ");
}
raf.close();
}/*catch(IOException e){
e.printStackTrace();
}
}*/
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
TestPoint t=new TestPoint();
//t.writeFile();
t.changeFile();
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询