Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否将类层次结构对象列表写入文本文件?_Java_Text Files_Virtual Functions - Fatal编程技术网

Java 是否将类层次结构对象列表写入文本文件?

Java 是否将类层次结构对象列表写入文本文件?,java,text-files,virtual-functions,Java,Text Files,Virtual Functions,我在做一个类分配,我必须要做一个我已经做过的程序,它由层次结构中的多个类和一个“demo”类组成,该类根据每个对象的信息组成进行打印。现在我需要更改它,这样就不用在控制台上打印,而是必须使用用户输入的文本文件名将其打印到文本文件中。下面是“demo”主类的编码: import java.lang.*; 导入java.io.*; 导入java.util.*; /** *变形演示 * *@作者(肖恩·霍尔) *@版本(4/12/21) */ 公共类变形演示 { 公共静态void main(字符串[]

我在做一个类分配,我必须要做一个我已经做过的程序,它由层次结构中的多个类和一个“demo”类组成,该类根据每个对象的信息组成进行打印。现在我需要更改它,这样就不用在控制台上打印,而是必须使用用户输入的文本文件名将其打印到文本文件中。下面是“demo”主类的编码:

import java.lang.*;
导入java.io.*;
导入java.util.*;
/**
*变形演示
*
*@作者(肖恩·霍尔)
*@版本(4/12/21)
*/
公共类变形演示
{
公共静态void main(字符串[]args)引发异常
{
人员[]人员=新人员[12];
人[0]=新生(“科蒂,曼尼”,4910);
人[1]=新大学生(“Kick,Anita”,9931,1);
人[2]=新大学生(“德班克,罗宾”,8812,4);
人物[3]=新人(“Bugg,June”);
人[4]=新父母(“德班克,西尔维亚”,1849年);
人物[5]=新校友(“麦考姆斯,丹尼尔”,1542,“皮卡帕阿尔法”);
人民[6]=新学生政府(“斯蒂尔,阿什利”,7025,“班级主席”);
人员[7]=新员工(“Jones,Jason”,150,“英语”);
人[8]=新教员(“格林,艾琳”,124,“数学”,“微积分教授”);
人员[9]=新员工(“McKinley,Aaron”,86岁,“维修”,14岁);
人[10]=新人(“本田,爱德华”);
人[11]=新大学生(“Huginkiss,Amanda”,8230,2);
//用户输入扫描仪
扫描仪键盘=新扫描仪(System.in);
//准备输出文件
System.out.print(“输入新文件的名称:”);
字符串outputFileName=keyboard.nextLine();
try(PrintWriter输出=新的PrintWriter(新文件(outputFileName)))
{
用于(人员p:人员)
{
输出println(p);
output.println();
}
}
}
}
我知道它还没有完成,但编程就我所知。多类层次结构都链接到person对象,每个对象都有一条与之相关的特定信息。有人对如何将信息复制到文本文件中并保持这样的输出格式有什么建议吗

姓名:科蒂,曼尼
学号:4910

姓名:Kick,安妮塔
学号:9931

姓名:罗宾·德班克
学号:8812

姓名:Bugg,June

姓名:德班克,西尔维亚
家庭号码:1849

姓名:丹尼尔麦考姆斯
家庭号码:1542
校友联谊会/女生联谊会:Pi Kappa Alpha

姓名:斯蒂尔,阿什利
学号:7025
学生会名称:班级主席

姓名:琼斯,杰森
员工ID:150
员工部门:英语

姓名:格林,艾琳
员工ID:124
员工部门:数学
教职:微积分教授

姓名:麦金利,亚伦
员工ID:86
员工部门:维护
职员薪级:14

姓名:本田,爱德华

姓名:阿曼达胡金吉斯
学号:8230
学生级别:1


我应该提到的是,这些课程中的每一个课程都有一种打印每个人/学生/本科生等拥有的信息的方式,也许有某种方法可以根据类打印输出中的内容打印出信息?

在class
Person
中实现一个方法,以提供类的字符串表示形式,例如,它可以是从
对象
类继承的标准方法
toString
,有助于打印Person及其子类:

//类人
@凌驾
公共字符串toString(){
return“Name:+this.Name;
}
然后在子类中重写此实现,并使用
super.toString()
附加调用父实现的相关详细信息:

//班级学生扩展个人
@凌驾
公共字符串toString(){
返回String.format(“%s%n学生编号:%d”,super.toString(),this.studentNumber);
}
本科生
可以扩展
学生
,但不需要覆盖
到字符串
的实现,并且可以重用
学生
的实现

StudentGovernment
也可以扩展
Student
,但它必须覆盖其
toString
以添加有关标题的信息:

//班级学生政府扩展学生
@凌驾
公共字符串toString(){
返回字符串.format(“%s%n学生政府职务:%s”,super.toString(),this.Title);
}
对于
Person
的所有子类,依此类推


应使用
try with resources
实现文件打印,以确保写入程序正确关闭

此外,需要修改逻辑以读取文件名并创建写入程序一次(不是针对输入数组中的每个人):

//用于用户输入的扫描仪
扫描仪键盘=新扫描仪(System.in);
//准备输出文件
System.out.print(“输入新文件的名称:”);
字符串outputFileName=keyboard.nextLine();
try(PrintWriter输出=新的PrintWriter(新文件(outputFileName))){
用于(人员p:人员){
输出println(p);
output.println();//分隔人员数据的空行
}
}

您真的需要为
people
数组中的每个人创建一个键盘扫描仪和一个新的输出文件吗?如何将至少
个人
数据打印到文件中?仅供参考,“多重继承”的概念不明确,通常指的是可以从多个父类继承行为的类。C++有这个,但是java没有。在Java中,您可以从一个类(父类)继承行为,也可以从多个接口(不提供