2015-12-05 211 views
1

我有一個排的內容.CSV文件:)使用掃描儀讀取.CSV文件?

Detroit 25 4 7 W Green Bay 7 7 4 L 

我創建輸入

Scanner input = new Scanner(file); //file here is the .csv file 

如果我打印input.next(名新的掃描儀,這是什麼顯示:

Detroit,25,4,7,W,Green 
Bay,7,7,4,L 

如果我創建一個新的磁盤陣列,並指定一個分隔符,如下所示:

String[] list = input.next().split(","); 

,然後打印陣列

System.out.println(list[2]); 

的索引,我得到這個:

Detroit,25,4,7,W,Green 
7 

而不是4.如何把該.csv的每個值在其自己的邏輯索引? 例子:

list[0] = Detroit list[1] = 25 and so on. 

這是我的全碼:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.scene.layout.*; 
import javafx.scene.control.*; 
import javafx.stage.FileChooser; 
import javafx.geometry.*; 
import java.util.*; 
import java.io.*; 

public class POS extends Application 
{ 
    private Button runBtn = new Button("Run"); 
    @Override 
    public void start(Stage stage) 
    { 
     GridPane pane = new GridPane(); 

     VBox vBox = new VBox(20); 
     vBox.setPadding(new Insets(15)); 
     Button selectBtn = new Button("Select File"); 
     selectBtn.setStyle("-fx-font: 22 arial; -fx-base: #b6e7c9;"); 
     vBox.getChildren().add(selectBtn); 

     selectBtn.setOnAction(e-> 
     { 
     FileChooser fileChooser = new FileChooser(); 
     fileChooser.setTitle("Open Resource File"); 
     FileChooser.ExtensionFilter extFilter = 
         new FileChooser.ExtensionFilter("TEXT files (*.csv)", "*.CSV", ".xlsv", ".XLSV"); 
       fileChooser.getExtensionFilters().add(extFilter); 
     File file = fileChooser.showOpenDialog(stage); 




      run(file); 


     }); 

     RadioButton weekBtn = new RadioButton("Current Week"); 
     RadioButton seasonBtn = new RadioButton("Entire Season"); 

     runBtn.setStyle("-fx-font: 22 arial; -fx-base: #b6e7c9;"); 



     seasonBtn.setDisable(true); 
     vBox.getChildren().add(weekBtn); 
     vBox.getChildren().add(seasonBtn); 
     vBox.getChildren().add(runBtn); 

     pane.add(vBox, 0, 0); 
     Scene scene = new Scene(pane, 500, 200); 
     stage.setScene(scene); 
     stage.setTitle("POS"); 
     stage.show(); 
    } 
    public void run(File file) 
    { 
     runBtn.setOnAction(e-> 
     { 
     try 
     { 
      Scanner input = new Scanner(file); 
      input.nextLine(); 
      System.out.println(input.next()); 
      sortFile(file, input); 

      input.close(); 
     } 

     catch (InputMismatchException ex) 
     { 
      System.out.println("Error you seem to have typed the wrong type of file"); 
     } 
     catch(IOException ex) 
     { 
      System.out.println("Error, file could not be found"); 
     } 


     }); 
    } 
    public ArrayList<String> sortFile(File file, Scanner input) 
    { 
    String[] list = input.next().split(","); 
    System.out.println(list[2]); 
     if (input.hasNext()) 
     { 
     return null; 
     } 
     return null; 
    } 

} 
+0

可能你正在從'Bay,7,7,4,L'行獲得輸出。 – Atri

+0

@ElliottFrisch我已經添加了我的完整代碼 – Bytes

+0

您的csv文件沒有「','」,而您在說'input.next()'打印底特律25,4,7,W,綠色 灣, 7,7,4,L'。這不可能。 – Atri

回答

0

看來,你的CVS文件是製表符分隔格式。你應該使用:

String[] list = input.nextLine().split("\t"); 

它應該工作。

+0

當我用「,」替換「\ t」,然後打印數組的第二個索引,它給了我一個錯誤,指出索引超出範圍 – Bytes

+0

檢查是否使用nextLine而不是next。 –

+0

next()和nextLine()給了我相同的結果 – Bytes