如何在java中使用csv文件调用方法?

时间:2015-10-11 21:10:30

标签: java file loops csv

我正在处理地址簿程序,我要做的最后一件事是允许用户指定一个充满命令的文件,例如:添加'名称',删除'名称,打印,等等。

所有这些方法都已在我的程序中实现,当我在控制台中输入命令时它们可以正常工作。

我尝试过使用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

}

enter image description here

1 个答案:

答案 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文件每行有一个命令,实际命令是每一行的第一部分。