2015-10-11 84 views
0

我正在研究地址簿程序,而我正在嘗試做的最後一件事是允許用戶指定一個充滿命令的文件,例如:添加名稱,刪除名稱,打印和等等。如何在java中使用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

您正在使用該文件的所有內容複製到陣列中添加只有一個字符串。 我不知道你的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文件有每行一個命令和實際的命令是每行的第一部分。

+0

我將上傳我的csv文件的屏幕截圖。我試過你的源代碼,它仍然做同樣的事情。它只添加第一行。 – Remixt

+0

我自己嘗試過,當然在發佈之前,它正在工作,你的csv文件看起來就像我所想的那樣。我不認爲你實際上在使用我的源代碼。 –

+0

我直接從堆棧溢出複製並粘貼它。 – Remixt

相關問題