使用文件中的数据创建对象

Creating objects with data from file

我有一个包含应用程序数据的文本文件,我想用该数据创建对象。文本文件中的每一行都是一个对象,格式为:<name> <posX> <posY> <posY> <velX> <velY> <velZ> <mass> <radius>line 是一个 String,其中一行来自该文件。为了读取数据,我在空白处拆分了 string。然后我得到变量 name.

的第一个元素
String[] args = line.split("\s+");
String name = args[0];

然后我想从该行中获取下一个参数。我当然可以这样做:

double posX = Double.parseDouble(args[1]);
double posY = Double.parseDouble(args[2]);
double posZ = Double.parseDouble(args[3]);
double velX = Double.parseDouble(args[4]);
double velY = Double.parseDouble(args[5]);
double velZ = Double.parseDouble(args[6]);
double mass = Double.parseDouble(args[7]);
double radius = Double.parseDouble(args[8]);

然而,它看起来不太好。我想过这样做:

Map<String, Double> params = new HashMap<>();
String[] keys = {"posX", "posY", "posZ", "velX", "velY", "velZ", "mass", "radius"};
int i = 1;
for (String key : keys) {
      params.put(key, Double.parseDouble(args[i]));
      i++;
}

现在我不确定这是否是解决我的问题的最佳方法。你知道更好的方法吗?

最终会涉及到您要对数据执行的操作。

如果您想创建一个 class 的实例来存储文件中每个条目的数据,当前的解析可能没问题。您可以使用哈希映射(或字典,其他语言)之类的键值对来实现它,但是当您实际使用对象时,它在性能方面比属性慢。

在一个解析操作中有很多行并没有错,因为无论如何这都被认为是样板代码(并且一旦您定义了文件格式就不需要再次看到)。最终,你使用循环和哈希映射的方式编译成在你的机器上执行的实际指令数量大致相同,那么为什么要将性能置于美学之上呢?

您可以创建一个 new class of Java,在本例中为 Example,您将在其中创建一个构造函数(同名),如下所示:

public class Example{

double posX, posY, posZ,velX,velY,velZ,mass,radius;
String name;

   public Example(String line){

   String[] args = line.split("\s+");

   name = args[0];
   posX = Double.parseDouble(args[1]);
   posY = Double.parseDouble(args[2]);
   posZ = Double.parseDouble(args[3]);
   velX = Double.parseDouble(args[4]);
   velY = Double.parseDouble(args[5]);
   velZ = Double.parseDouble(args[6]);
   mass = Double.parseDouble(args[7]);
   radius = Double.parseDouble(args[8]);
   }

在此 class 中,您可以使用所有 GETSET 方法分别从对象恢复信息或修改它。您必须为您在对象上使用的每个变量创建每个 GETSET 方法。例如,如果你想为变量 name 创建 GET 和 SET 方法,你必须这样做:

public void setName (String n) {
   this.name = n;
} 

public String getName (){
  return name;
}

对象中的所有变量也是如此。

然后,您可以从 Main class of Java 创建一个新对象,如下所示:

Example object = new Example(string);

其中 string 这是您要用来创建对象的字符串。

它会让你的代码更清晰。

我希望它对你有用。