使用Scanner读取.CSV文件?

时间:2015-12-05 03:11:16

标签: java arrays java.util.scanner

我有一个带有一行内容的.CSV文件:

Detroit 25  4   7   W   Green Bay   7   7   4   L

我创建了一个名为input

的新扫描仪
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;
   }

}

1 个答案:

答案 0 :(得分:0)

您的cvs文件似乎采用制表符分隔格式。你应该使用:

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

它应该有用。