gpt4 book ai didi

java - 如何在 .txt 文件中放置、读取和修改 ArrayList 对象?

转载 作者:行者123 更新时间:2023-12-02 06:41:55 25 4
gpt4 key购买 nike

这是修改后的代码,当我运行该程序时,它可以工作,但它没有按我的预期工作。我不知道为什么它不会写出我在输入“add”后输入的行,而且当我输入“show”时它也没有显示任何内容。看来我可能错过了一些东西:

import java.io.BufferedReader; 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.nio.charset.Charset;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
import java.util.List;

public class unfinished {

public static void main(String[] args) throws IOException {

//String command;
//int index = 0;

Path path = FileSystems.getDefault().getPath("source.txt");
List<String> list = loadList(path);

try(Scanner sc = new Scanner(System.in)){
// System.out.print("Enter the Command: ");
String[] input = sc.nextLine().split(" ");
while(input.length > 0 && !input[0].equals("exit")){

switch(input[0]){
case "add" : addToList(input, list); break;
case "remove" : removeFromList(input, list); break;
case "show": showList(input, list); break;
}
}
input = sc.nextLine().split(" ");

}

saveList(path, list);

}

这是我旧代码中用于排序和清除的部分:

/** 
Collections.sort(MenuArray);
int i = 0;
for (String temporary : MenuArray) {
System.out.println(++i + ". " + temporary);
}
//clear
MenuArray.clear();
System.out.println("All objects have been cleared !");
*/

private static void saveList(Path path, List<String> list) throws IOException {
// TODO Auto-generated method stub
Files.write(path, list, Charset.defaultCharset(),
StandardOpenOption.CREATE,
StandardOpenOption.TRUNCATE_EXISTING);
}


private static void removeFromList(String[] input, List<String> list) {
// TODO Auto-generated method stub

}


private static void showList(String[] input, List<String> list) {
// TODO Auto-generated method stub

}

private static void addToList(String[] input, List<String> list) {
// TODO Auto-generated method stub

}

private static List<String> loadList(Path path) throws IOException {
// TODO Auto-generated method stub
return Files.readAllLines(path, Charset.defaultCharset());
}


}

最佳答案

一方面,您可以通过使用 switch 语句将程序编写为实际的菜单程序来简化事情。例如:

Path path = FileSystems.getDefault().getPath("jedis.txt");
List<String> list = loadList(path);

try(Scanner sc = new Scanner(System.in)){
String[] input = sc.nextLine().split(" ");
while(input.length > 0 && !input[0].equals("exit")){
switch(input[0]){
case "add" : addToList(input, list); break;
case "show": showList(input, list); break;
}
input = sc.nextLine().split(" ");
}
}

saveList(path, list);

请注意在扫描器周围使用 try 语句的重要性,因为扫描器消耗资源 (System.in),所以当您不再需要该资源时释放该资源非常重要。

现在,我已将操作逻辑与菜单呈现分开。这样菜单算法就可以只关心这一点,而每个操作方法都可以担心它自己的操作。因此,您可以担心读取 loadList 中的文件。 ,并担心将其保存在 saveList 中,担心将新元素添加到 addToList 中的列表中,等等

现在,如果有问题的文件仅包含字符串,正如您的问题似乎暗示的那样。您可以使用 Java NIO 做一些非常简单的事情来读取它,例如

public static List<String> loadList(Path path) throws IOException {
return Files.readAllLines(path, Charset.defaultCharset());
}

写回文件就像这样简单:

public static void saveList(Path path, List<String> list) throws IOException {
Files.write(path, list, Charset.defaultCharset(),
StandardOpenOption.CREATE,
StandardOpenOption.TRUNCATE_EXISTING);
}

或者您可以使用传统的 Java I/O 类,如 BufferedReader 和 FileWriter,正如其他答案似乎建议的那样。

-- 编辑 1--

好吧,如果你想从列表中删除一个元素,你所要做的就是支持菜单中的另一个操作:

switch(input[0]){
case "add" : addToList(input, list); break;
case "remove" : removeFromList(input, list); break;
case "show": showList(input, list); break;
}

并实现相应的action方法。例如,对于删除操作,可能是这样的:

public static void removeFromList(String[] input, List<String> list){
if(input.length == 2 && input[1].matches("\\d+")){
int index = Integer.parseInt(input[1]);
if(index < list.size()){
list.remove(index);
} else {
System.out.println("Invalid index: " + index);
}
} else {
System.out.println("Invalid input: " + Arrays.toString(input));
}
}

在这种情况下,用户需要输入“remove 10”等命令才能从列表中删除该索引。

您可能希望实现您的方法,以显示元素索引的方式显示列表,以便用户可以更轻松地选择要删除的元素。例如,显示列表方法应显示类似

0. Obi-wan
1. Yodah
2. Luke
3. Anakin

-- 编辑 2--

为了读取用户输入,您可能需要显示一条消息,例如:“输入命令(或键入选项的帮助):”。

显然,您必须在使用 sn.nextLine() 读取用户的输入之前放置此内容。由于我们在两个不同的地方执行此操作,因此您可能更愿意为此编写一个方法,这样您只需编写此代码一次。有点像:

private String[] getComnand(Scanner sc) {
System.out.println("Enter command (or type help for options): ");
return sc.nextLine().split(" ");
}

现在我们可以在菜单代码中重用它。

此外,您可能需要修复菜单,以在用户键入错误命令或键入帮助时显示可用命令列表。

switch(input[0]){
case "add" : addToList(input, list); break;
case "remove" : removeFromList(input, list); break;
case "show": showList(input, list); break;
default: showHelp(input);
}

showHelp()您可能希望显示可用命令列表的方法。有点像:

Available commands:

add <name>...........Adds the given name to the list
remove <index>.......Removes the item in the given index
show.................Displays all items and their indices
help.................Displays this help

关于java - 如何在 .txt 文件中放置、读取和修改 ArrayList 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19066952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com