我正在处理地址簿程序,我要做的最后一件事是允许用户指定一个充满命令的文件,例如:添加'名称',删除'名称,打印,等等。
所有这些方法都已在我的程序中实现,当我在控制台中输入命令时它们可以正常工作。
我尝试过使用for循环来读取文件输入流中的命令,但它只处理csv文件中的第一个命令。我甚至尝试首先将列出的命令添加到字符串数组中,然后从流数组中读取,我得到相同的结果。
以下是我当前代码的处理第一个命令的内容,但没有别的。
private static void fileCommand(String file) throws IOException {
File commandFile = new File(file);
try {
FileInputStream fis = new FileInputStream(commandFile);
int content;
while ((content = fis.read()) != -1) {
// convert to char and display it
StringBuilder builder = new StringBuilder();
int ch;
while((ch = fis.read()) != -1){
builder.append((char)ch);
}
ArrayList<String> commands = new ArrayList<String>();
commands.add(builder.toString());
for(int i = 0; i<commands.size();i++){
if (commands.get(i).toUpperCase().startsWith("ADD")|| commands.get(i).toUpperCase().startsWith("DD")){
addBook(commands.get(i));
}
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
}
答案 0 :(得分:1)
您只是将一个包含所有文件内容的字符串添加到数组中。 我不确定你的csv文件到底是什么样的,但试试这个:
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class SOQuestion {
private static void fileCommand(String file) throws IOException {
Path pathFile = Paths.get(file);
List<String> allLines = Files.readAllLines(pathFile, StandardCharsets.UTF_8);
for (String line : allLines) {
if (line.toUpperCase().startsWith("ADD")) {
addBook(line);
}
}
}
private static void addBook(String line) {
//Do your thing here
System.out.println("command: "+line);
}
public static void main(String[] args) throws IOException {
fileCommand("e:/test.csv"); //just for my testing, change to your stuff
}
}
假设你的csv文件每行有一个命令,实际命令是每一行的第一部分。