Java 读取文件并将其存储在对象中

Java 读取文件并将其存储在对象中,java,arrays,object,text-files,Java,Arrays,Object,Text Files,我试图从一个文件中读取内容并将其存储到一个名为ToDoList的对象中(我假设是在GetItem方法下)。然后我应该允许用户添加到列表中。但是我不知道如何创建对象并打印它 public class ToDoList { private ToDoItem[] items; ToDoItem td = new ToDoItem(); String inputline; Scanner keyboard = new Scanner(System.in); int i = 0; String[]

我试图从一个文件中读取内容并将其存储到一个名为ToDoList的对象中(我假设是在GetItem方法下)。然后我应该允许用户添加到列表中。但是我不知道如何创建对象并打印它

public class ToDoList {

private ToDoItem[] items;

ToDoItem td = new ToDoItem();
String inputline;
Scanner keyboard = new Scanner(System.in);

int i = 0;

String[] stringArray = new String[100];



private void setItems(ToDoItem[] items) throws FileNotFoundException {
    File file = new File("ToDoItems.txt");
    Scanner ReadFile = new Scanner(file);

    while (ReadFile.hasNext()) {
        String ListString = ReadFile.nextLine();
        stringArray[100] = (ListString);
    }
}

private ToDoItem[] getItems() {

    return items;
}

public void addItem(int id, String description) {
    stringArray[100] = (td.getId() + td.getDescription());

}

public String[] getAddItem() throws FileNotFoundException {

    try (PrintWriter fout = new PrintWriter(new File("ToDoItems.txt"))) {
        do {
            System.out.println("add to the list? [y/n]");
            inputline = keyboard.nextLine();

            if ("y".equals(inputline)) {
                i++;
                stringArray[i] = (td.getId() + ". " + td.getDescription() + "\n");
                fout.print(stringArray[i]);
            } else {

                System.out.println("Here is the list so far:");

            }
        } while ("y".equals(inputline));
        return stringArray;
    }
}

@Override
public String toString() {
    return "ToDoList{" + "items=" + getItems()
            + '}';
}

我应该使用“getAddItem”方法来允许用户添加到列表中。但我不知道如何将数组添加到对象。更不用说制造物体了

你在问一个广泛的问题。以下是一些设计技巧

  • 创建集合类。这可以称为ToDoList。然后创建该类的属性和行为。一个属性将是待办事项列表项的集合变量。您可以使用、列表、ArrayList等。行为可以是添加、删除、重新排序等
  • 创建项目类。再次介绍属性和行为。属性可以包括要做什么、日期、重要性级别等
  • 读取文件时,让程序为每行、每项等实例化ToDoItem类。然后将它们保存到以前创建的容器类(ToDoList)中
  • 您可以使用ToDoList类的addItem方法(行为)让用户向ToDoList中添加更多项。如果您希望在程序关闭后仍保留该列表。您可以创建一个数据库来存储对象

  • 祝你好运。

    这是一段小代码,用于扩展pininfarina所说的内容,并帮助你继续前进

  • 你需要一个ToDoItem课程。大概是这样的:

    public class ToDoItem {
    
        private String id;
    
        private String description;
    
        public ToDoItem(String id, String description) {
            this.id = id;
            this.description = description;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getDescription() {
            return description;
        }
    
        public void setDescription(String description) {
            this.description = description;
        }
    
    }
    
    public class RunIt {
    
        private static Scanner keyboard = new Scanner(System.in);
    
        public static void main(String[] args) throws FileNotFoundException {
            ToDoList list = new ToDoList("ToDoItems.txt");
    
            try (PrintWriter fout = new PrintWriter(new File("ToDoItems.txt"))) {
                String inputLine;
                do {
                    System.out.println("add to the list? [y/n]");
                    inputLine = keyboard.nextLine();
    
                    if ("y".equals(inputLine)) {
                        System.out.println("enter a to-do using the format 'id,description'");
                        StringTokenizer tokenizer = new StringTokenizer(keyboard.nextLine(),
                                ",");
                        String id = tokenizer.nextToken();
                        String description = tokenizer.nextToken();
                        list.addItem(new ToDoItem(id, description));
                    } else {
                        System.out.println("Here is the list so far:");
                        System.out.println(list);
                    }
                } while ("y".equals(inputLine));
            }
        }
    }
    
  • 然后需要一个ToDoList类来保存每个项。您使用数组支持您的,但我使用了ArrayList:

    public class ToDoList {
    
        private ArrayList<ToDoItem> items = new ArrayList<ToDoItem>();
    
        public ToDoList(String fileName) throws FileNotFoundException {
            File file = new File(fileName);
            Scanner scanner = new Scanner(file);
    
            try {
                while (scanner.hasNext()) {
                    String nextLine = scanner.nextLine();
                    StringTokenizer tokenizer = new StringTokenizer(nextLine, ",");
                    String id = tokenizer.nextToken();
                    String description = tokenizer.nextToken();
                    items.add(new ToDoItem(id, description));
                }
            } finally {
                scanner.close();
            }
        }
    
        public void setItems(ArrayList<ToDoItem> newItems) {
            this.items.addAll(newItems);
        }
    
        public List<ToDoItem> getItems() {
            return items;
        }
    
        public void addItem(ToDoItem item) {
            items.add(item);
    
        }
    
        @Override
        public String toString() {
            StringBuilder builder = new StringBuilder();
            builder.append("ToDoList{");
            for (ToDoItem item : items) {
                builder.append(item.getId() + "," + item.getDescription() + "\n");
            }
            builder.append("}");
    
            return builder.toString();
        }
    }
    

    请注意,这里有很大的改进空间(异常处理、更健壮的文件读取等),但这应该让您开始。

    您的问题太广泛了-请尝试将其分解并思考您正在尝试做什么。我建议从思考setItems方法要做什么开始,并在这一点上提出一个新问题。这将允许您提供更多详细信息,例如示例文件和方法执行后数组的预期内容。感谢您的回复。我一直在摆弄你的东西。但我有一个问题是它一直在删除文件。你说过会的。但每次我用扫描器阅读时,我都记不起它在删除。你能给我解释一下吗?它会先读取然后删除吗?问题不在于扫描仪。它实际上在main()方法中。PrintWriter上的Javadoc说明:@param file要用作此写入程序目标的文件。如果文件存在,那么它将被截断为零大小;否则,将创建一个新文件。输出将写入文件并进行缓冲。所以实际上是PrintWriter杀死了文件,而不是扫描器。