如何保存文件和阅读

时间:2010-03-28 12:52:08

标签: java file grid save

我创建了一个以网格布局格式放置随机图像的程序。 网格布局的大小为6 x 6 = 36。 只有10个图像(每个图像都不同),其余图像都是空的。

alt text http://freeimagehosting.net/uploads/bfb7e85f63.jpg

如何将其保存到文件并再次阅读,以便在网格上显示相同位置的相同图像?

以下是我用来保存图片的代码:

//image file
String []arrPic = {"pic1.jpg","pic2.jpg","pic3.jpg","pic4.jpg","pic5.jpg","pic6.jpg","pic7.jpg","pic8.jpg","pic9.jpg","pic10.jpg",,"pic11.jpg","pic12.jpg","pic13.jpg"};

ArrayList<String> pictures = new ArrayList<String>(Arrays.asList(arrPic));

ArrayList<String> file = new ArrayList<String>();    

JPanel pDraw = new JPanel(new GridLayout(6,6,2,2));
...

//fill all grids with empty label
for (int i =0; i<(6*6); i++){   
   JLabel lbl = new JLabel("");
   pDraw.add(lbl);  
}
...

//Choose random box to be filled with images
for(int i=0; i<10; i++){ 
   Boolean number = true;
   while(number){
   int n = rand.nextInt(35); 
   if(!(arraylist.contains(n)))
     number = false;
   arraylist.add(n);
}

//fill the grids with images
for(int i=0; i<arraylist.size(); i++){

   //select random image from arraylist
   int index = rand.nextInt (pictures.size());
   String fileName = (String) pictures.get(index );

   //find the image file
   icon = createImageIcon(fileName);   

   //save the file in a new file
   file.add(fileName);

   //rescaled the image      
   int x = rand.nextInt(50)+50;
   int y = rand.nextInt(50)+50;

   Image image = icon.getImage().getScaledInstance(x,y,Image.SCALE_SMOOTH);         
   icon.setImage(image);

   //remove empty label and replace it with an image
   int one = (Integer) arraylist.get(i);
   pDraw.remove(one);                           
   final JLabel label;
   pDraw.add(label,one); 

}

3 个答案:

答案 0 :(得分:2)

在您的代码中,rand类是java.util.Random吗?如果是这样,您可以自己“播种”它,然后将种子值保存到文本文件中。对于任何给定的种子,(伪)随机数发生器将以相同的顺序产生相同的“随机”数字。所以:

Random rand = null;

然后,创建一个新的“种子”并将其保存到文件中:

long seed = System.currentTimeMillis();
rand = new Random(seed);
try {
    BufferedWriter writer = new BufferedWriter(new FileWriter("whatever.txt"));
    writer.write(Long.toString(seed));
    writer.close();
} catch(IOException e) {
    e.printStackTrace();
}

或者在以下位置读取以前保存的值:

long seed = 0;
try {
    BufferedReader reader = new BufferedReader(new FileReader("whatever.txt"));
    seed = Long.parseLong(reader.readLine());
    reader.close();
} catch(IOException e) {
    e.printStackTrace();
}
rand = new Random(seed);

请注意,此代码不会检查以确保文件退出,或文件不为空,或者文件中不包含有效数字以外的内容等等。

答案 1 :(得分:1)

哎呀,误读了你的问题。

我会将每个网格值链接到指定图片/文件的数组的索引。保存该设置时,保存一个新数组,其中包含与网格关联的值(其中26个应该为空,对吗?)当文件打开时,最初从数组读取程序,如果数组是完全空的随机化

- 为网格创建一个foreach循环,如果它们为空,则将数组值设置为null,否则将值设置为与其关联的图像。使用pdraw.checkImage();

答案 2 :(得分:1)

您必须使用所需的所有信息保存配置文件。您可以使用属性文件。因此,您遍历网格,每次找到带有图像的单元格时,都会保存索引和文件名。然后当你重新加载程序时,你遍历所有潜在的属性值来找到存在的属性值,然后你得到图像的文件名,读取图像并将其加载到单元格中。