如何从文件中读取数据并创建对象并将其分配给数组?

时间:2014-10-07 17:01:02

标签: java object geometry java.util.scanner

GeometricObjectsData.txt

“CIRCLE”, 1, “blue”, true
“RECTANGLE”, 1, 2, “blue”, true
“RECTANGLE”, 10, 2, “red”, true
“CIRCLE”, 2, “green”
“RECTANGLE”
“CIRCLE”

驱动程序:我对如何将上述信息传输到对象然后将其分配给数组感到困惑。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class Driver {
public static void main(String[] args) throws FileNotFoundException {
    Scanner input = new Scanner(new File("C:/Users/Charles/Desktop/GeometricObjectsData.txt"));

    ArrayList<GeometricObject> list = new ArrayList<GeometricObject>();

    while (input.hasNext()) {
        String line = input.nextLine();
        System.out.println(line);
    }
  }
}

如果你想看到它们的代码,我还创建了另外三个名为GeometricObject,Circle和Recetangle的类。上面的信息表明了图形的类型以及半径,长度,宽度,颜色和填充的给定参数。

2 个答案:

答案 0 :(得分:0)

正如microsby0所说,你可能会将原始单词拆分成数组。我不相信有一种简单的方法可以直接将原始单词转换为类名((Circle)&#34; Circle&#34;不起作用,我认为这让你感到困惑)。您应该将每个数组读入某些参数并进行处理:

/*somewhere else in code:*/ shapeArray[i] = convert(array[0],array[1],...)//where i is some incremental value in a loop

Shape convert(String s, int someNumber,...) {
  Shape c;
  switch(s) {
    case "Circle":
      c = new Circle(...);
    break;
    case "Square"
      ...
    break;
    //and so on
  }

 //more application logic
 return c;
 }

转换可以返回一个可以指定给形状数组的形状。您始终可以使用function(method) 'overloading'来处理不同的输入。

答案 1 :(得分:0)

使用PSUEDOCODE:

我可能不会使用扫描仪但

BufferedReader buffer = new BufferedReader(new FileReader(file));

然后你会

//这应该将每行的文本分成一个数组

String buf[]= null;
    while ((line = buffer.readLine()) != null) {

        resultLine += line + ";";
        buf = resultLine.split(";");

    }
    buffer.close();

然后循环遍历数组buf并执行

if(buf[i].startsWith("C")) 

然后使用&#34;,&#34;在buf [i]上进行另一次拆分进入另一个数组,如String arr []

arr = buf[i].split(",");

然后是Circle Class中第二个数组的元素,如

Circle circle = new Circle(arr[0],arr[1],etc 

然后添加到数组

Object result[] = new Object[100];
result[0] = circle;