我有一个Vehicle类,其中包含有关Vehicle对象的所有信息,包括get和set方法。还有一个Showroom类,它维护所有Vehicle对象的列表,以及添加/删除和滚动列表的方法。
在我的main(一个名为VehicleDriverClass的单独类)中,我试图使用I / O将Vehicle数据写入文件并从文件中读取Vehicle数据。我可以写一个文件。我正在使用记事本和.txt文件来读取。我遇到的问题是如何在从文件中读取时终止行的结尾。这是Vehicle类的构造函数,所以你知道参数。
public Vehicle(String man, String mod, String VIN, String dateOfMan, char taxBand, int costOfVehicle)
{
this.manufacturer = man;
this.model = mod;
this.VIN = VIN;
this.dateOfManufacture = dateOfMan;
this.taxBand = taxBand;
this.costOfVehicle = costOfVehicle;
}
这就是我目前对Input方法的看法(不试图创建对象,只是从文件中读取)。传递给它的陈列室将在以后使用,当我创建车辆对象并将其添加到陈列室时。
//代码替换如下。
使用此实现,当dataFromFile输出到控制台时,它全部在一行上,而不是在新行上。当读入'\ n'时,readline()不会终止该行吗?
以下是我的数据存储在输入文件中的方式。
Fordtest\n Focus\n frank\n ioCheck\n 09/01/1989\n 23/11/2013\n true\n d\n 1995\n
所以现在,我如何让终止线?这样我就可以从中实现对象的创建。
编辑:I / O现在正在运行。我现在遇到的问题是我的Vehicle对象的构造函数需要最后两个变量的数据类型char和int。使用当前方法,它们处于字符串数组中。我已从上面删除了代码,并在下面添加了新的实现.public static void
addNewVehicleFromFile(Showroom s) { String dataFromFile; String [] tokens = null;
try
{
File fileReader = new File("AddNewVehicleFromFile.txt");
FileReader fr = new FileReader(fileReader);
BufferedReader br = new BufferedReader(fr);
while ((dataFromFile = br.readLine()) != null)
{
tokens = dataFromFile.split("~");
}
System.out.println(Arrays.toString(tokens));
Vehicle inputVehicle = new Vehicle(tokens[0], tokens[1], tokens[2], tokens[3],
tokens[4], tokens[5]);
/*
Erorr above here with these two. token[4] should be a char and [5] an int
*/
s.addVehicle(inputVehicle);
System.out.println("addNewVehicleFromFile Complete");
}
catch (FileNotFoundException fnfe)
{
System.out.println("File not found exception: " + fnfe.toString());
}
catch (IOException ioe)
{
System.out.println("I/O exception: " + ioe.toString());
}
}
我应该编写自己的toChar和toInt方法来调用这两个变量吗?或解析为int或类似。
答案 0 :(得分:1)
如果您更改输入数据格式,我认为您会做得更好。这就是XML和JSON诞生的原因。如果必须坚持当前的安排,请将数据元素之间的分隔符更改为代字号'〜'而不是\ n。
所以你的输入如下:
Fordtest~Focus~frank~ioCheck~09/01/1989~23/11/2013~true~d~1995
现在很容易解析:
String [] tokens = data.split("~");
为自己写一些工厂方法来创建车辆:
public class VehicleFactory {
private static final VehicleFactory INSTANCE= new VehicleFactory();
private VehicleFactory() {}
public static VehicleFactory getInstance() { return INSTANCE; }
public static Vehicle createVehicle(String data) {
Vehicle value = null;
String [] tokens = data.split("~");
if ((tokens != null) && (tokens.length > X)) {
// Map String to int or Date here
value = new Vehicle(tokens[0], tokens[1], tokens[2], tokens[3], tokens[4], tokens[5]);
}
return value;
}
public static List<Vehicle> createVehicles(File f) {
List<Vehicle> values = new ArrayList<Vehicle>();
// implementation left for you
return values;
}
}
答案 1 :(得分:0)
readLine()
的 Java语法匹配的字符时, \n
终止该行。在大多数文本编辑器中,这是换行符。要在Java字符串中表示换行符,请在源代码中使用\n
,但在手动创建文件时,请使用:
Fordtest
Focus
frank
ioCheck
09/01/1989
23/11/2013
true
d1995