Java 读取文本文件并将对象添加到数组中
我有一个Contact类,它基本上只保存联系人的信息。我们将contact对象存储在一个数组中 我必须将数组写入一个文本文件,我知道怎么做,但现在我必须读取该文件并将对象存储回数组,我被卡住了 注意,下面的ContactList也使用类Contact,它基本上只有get/set方法Java 读取文本文件并将对象添加到数组中,java,arrays,object,Java,Arrays,Object,我有一个Contact类,它基本上只保存联系人的信息。我们将contact对象存储在一个数组中 我必须将数组写入一个文本文件,我知道怎么做,但现在我必须读取该文件并将对象存储回数组,我被卡住了 注意,下面的ContactList也使用类Contact,它基本上只有get/set方法 import java.util.Scanner; import java.io.PrintWriter; import java.io.File; public class ContactList{ in
import java.util.Scanner;
import java.io.PrintWriter;
import java.io.File;
public class ContactList{
int ptr = -1;
Contact[] list;
int contactLength;
public ContactList(){//second constructor needed
list=new Contact[20];
contactLength=20;
for(int i =0;i<20;i++){
list[i]=null;
}
}
public ContactList(int length){//second constructor needed
list=new Contact[length];
contactLength=length;
for(int i =0;i<length;i++){
list[i]=null;
}
}
public boolean add(Contact c){
boolean found = false;
int i = 0;
while(!found&&i<20){
if (list[i]==null){
list[i]=c;
found=true;
ptr=i;
}
i++;
}
return found;
}
public Contact find(String name){
boolean found=false;
int i =0;
while(i<contactLength&&!found){
ptr++;
if(ptr==contactLength){
ptr=0;
}
if(list[ptr]!=null){
if (list[ptr].getName().contains(name)){
found=true;
return list[ptr];
}
}
i++;
}
return null;
}
public Contact remove(){
Contact current= list[ptr];
list[ptr]=null;
return current;
}
public void displayContacts(){
for(int i =0;i<contactLength;i++){
if(list[i]!=null){
System.out.println(list[i].toString());
}
else {
System.out.println("Empty:");//"Name:\nAddress:\nPhone\nComments:"
}
}
}
public boolean write (String fileName){
PrintWriter p = null;
try {
p = new PrintWriter(new File(fileName));
} catch (Exception e) {
return false;
}
for(int i =0;i<contactLength;i++){
if(list[i]!=null){
p.println(list[i].toString());
}}
p.close();
return true;
}
这是我到目前为止所拥有的
public boolean read(String fileName){
Scanner s = null;
try {
s = new Scanner(new File(fileName));
} catch (Exception e) { // returns false if fails to find fileName
return false;
}
for(int i=0; i)
}
是的,我必须使用数组!没有名单!请不要花哨,这是一门入门课,我不懂。只是扫描仪 我在评论部分看到了优点和缺点,那么结束辩论怎么样?考虑到你的写作方式,我猜你需要这样的东西:
public static void read(String fileName){
try(BufferedReader in = new BufferedReader(new FileReader(fileName))){
String line = null;
String[] contact = new String[4];
int contactCounter = 0;
int buffer = 0;
while ((line = in.readLine()) != null){
buffer = line.split("\t").length - 1;
contact[contactCounter] = line.split("\t")[buffer];
contactCounter++;
if (contactCounter == 3){
new Contact(contact[0], contact[1], contact[2], contact[3]);
contactCounter == 0;
}
}
} catch (IOException e){
e.printStackTrace();
}
}
我强烈建议您改进序列化联系人的方式因为这种格式很混乱,尤其是没有明确的边界,我能想到的最好办法是计算4个EOL来创建一个新联系人
也许你可以看看csv格式:你基本上已经发布了,“这里是一些一般要求,这里是一些无法解释的代码。哦,请给我没有列表的代码……”。请在提问中投入一些精力,包括——展示你试图解决问题的地方,只是没有用你的尝试,只是什么概念让你困惑。@HovercraftFullOfEels Smh,没有什么能让你们高兴。如果我不提供代码,他们会说,“我们没有看到你的代码,或者你什么都没写。”我提供了所有代码,因此很容易理解,并在我被卡住的地方崩溃了。。。请给我一个提示,如果您选择了一种无法可靠解析的格式(除非对联系人的元素可以包含的内容有很强的限制)。您最好使用JSON或XML保存联系人。解析回联系人列表很简单。例如,假设一个联系人的注释包含另一个联系人的字符串表示形式。你怎么能解析?”MSK:而不是摇头,考虑更详细地解释你的问题。当然,你不能责怪任何人要求这样做,是吗?你可以简单地提供一个你试图阅读的文件的简短示例,以及迄今为止你为阅读它而编写的代码。我们不需要查看您的联系人类或最初编写该文件的代码。只是,“我正试图解析这个包含姓名、地址、电话号码和注释的文本文件。这是我为解析它们而编写的代码,但我无法…”以及您遇到问题的特定部分。
public static void read(String fileName){
try(BufferedReader in = new BufferedReader(new FileReader(fileName))){
String line = null;
String[] contact = new String[4];
int contactCounter = 0;
int buffer = 0;
while ((line = in.readLine()) != null){
buffer = line.split("\t").length - 1;
contact[contactCounter] = line.split("\t")[buffer];
contactCounter++;
if (contactCounter == 3){
new Contact(contact[0], contact[1], contact[2], contact[3]);
contactCounter == 0;
}
}
} catch (IOException e){
e.printStackTrace();
}
}