Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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_Arrays_Object - Fatal编程技术网

Java 读取文本文件并将对象添加到数组中

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

我有一个Contact类,它基本上只保存联系人的信息。我们将contact对象存储在一个数组中

我必须将数组写入一个文本文件,我知道怎么做,但现在我必须读取该文件并将对象存储回数组,我被卡住了

注意,下面的ContactList也使用类Contact,它基本上只有get/set方法

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();
     }
}