Maison  >  Article  >  Java  >  Comment importer des fichiers CSV dans JTable pour les afficher à l'aide de Java

Comment importer des fichiers CSV dans JTable pour les afficher à l'aide de Java

WBOY
WBOYavant
2023-04-21 23:34:061014parcourir

Vue d'ensemble

Principaux points de connaissance

a.Classe SwingNode : encapsule le composant Java swing dans un nœud JavaFX, afin que Java Swing puisse être imbriqué avec JavaFX, c'est moche, mais l'opération est simple et le composant de table JavaFX (. TableView, etc.) est un peu compliqué, j'ai donc choisi d'utiliser JavaSwing imbriqué, soyez juste laid

b.javacsv-2.0.jar : utilisé pour lire des fichiers csv via des adresses de fichiers et peut effectuer une série d'opérations bien qu'après. 2008 Il ne sera plus mis à jour, mais il suffit d'exploiter un fichier csv.

Classe c.FileChoose : un sélecteur de fichiers pour JavaFX qui peut ouvrir le gestionnaire de ressources local. La beauté de l'interface utilisateur ou non dépend de la version de votre système.

Classe d.CsvReader : une classe d'outils sous le package javacsv-2.0.jar, principalement utilisée pour exploiter les fichiers csv.

Classe e.JTable : créez une instance JTable pour afficher le fichier csv après son ouverture. Vous devez payer. attention aux paramètres Dans la commande, le contenu du tableau est un tableau à deux dimensions et l'en-tête est un tableau à une dimension

JTable table = new JTable(表格内容,表头);

f Stockez le tableau à un chiffre dans le tableau à une dimension :

String[][] arr = new String[10][];//开辟一个10行的二维数组
String[] row1 = {"id","name","sex","age"};
 
arr[0] = row1;//存进二维数组

g. JTable n'affiche pas l'en-tête : vous devez placer l'objet JTable dans La méthode principale de

JTable table = new JTable(表内容,表头);
JScrollPane jScrollPane = new JScrollPane(table);
 
SwingNode swingNode = new SwingNode();
swingNode.setContent(jScrollPane);//使用swingNode封装swing组件,就可以在Javafx中用了

CsvReader dans un volet

  • le nouveau CsvReader (String filePath) doit transmettre une adresse de fichier csv local lors de la construction de l'initialisation

  • boolean readHeaders() lit les en-têtes et saute

  • String[] getHeaders() récupère les en-têtes du fichier csv (très étrange, vous devez appeler la méthode readHeaders() avant de pouvoir l'obtenir, sinon un null l'exception du pointeur sera signalée)

C'est tout :

CsvReader reader = new CsvReader("xxx.csv");
reader.readHeaders(); //没有这句话,执行下面会报错
String[] head = reader.getHeaders();
  • boolean readRecord() Lit une ligne de contenu csv Tant que vous l'appelez, la prochaine fois que vous l'appelez, il passera à la ligne suivante. de csv. Habituellement, nous utilisons une boucle while pour exploiter tout le contenu ligne par ligne dans le temps

  • String getRawRecord() Lire une ligne Data

while (reader.readRecord()){
    System.out.println(reader.getRawRecord());//输出一行内容
}

Instance - Lire un fichier csv à partir du bureau local

@Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("文件选择器");
        primaryStage.setHeight(600);
        primaryStage.setWidth(800);
 
        final FileChooser fileChooser = new FileChooser();
 
        //设置打开资源管理器后的文件过滤
        fileChooser.getExtensionFilters().addAll(
                new FileChooser.ExtensionFilter("All Images","*.*"),
                new FileChooser.ExtensionFilter("PNG","*.png"),
                new FileChooser.ExtensionFilter("MP4","*.mp4"),
                new FileChooser.ExtensionFilter("CSV","*.csv")
        );
 
        final Button open = new Button("打开文件");
 
        final GridPane inputGridPane = new GridPane();//创建格子布局面板
        GridPane.setConstraints(open,0,0);//第0行0列
 
        inputGridPane.setHgap(6.0);//设置水平间距
        inputGridPane.setVgap(6.0);//设置垂直间距
        inputGridPane.getChildren().addAll(open);//添加按钮
 
        final Pane rootGroup = new VBox(12);//创建一个垂直盒子布局器
        rootGroup.getChildren().addAll(inputGridPane);//把格子面板放进来
        rootGroup.setPadding(new Insets(12,12,12,12));
 
        primaryStage.setScene(new Scene(rootGroup));
        primaryStage.show();
 
//设置点击-打开文件-的动作事件
open.setOnAction(event -> {
            File file = fileChooser.showOpenDialog(primaryStage);//在当前窗口打开文件选择器
            if (file != null){
                try {
                    FileInputStream inputStream = new FileInputStream(file);
                    BufferedInputStream stream = new BufferedInputStream(inputStream);
                    String fileName = file.getName();
                    String filePath = file.getAbsolutePath();
                    System.out.println("文件路径 = "+filePath);
                    try {
                        CSVDemo.read(filePath);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }    
                    //封装JTable,使得JTable和Javafx嵌套在一起    
                    SwingNode swingNode = new SwingNode();
                    try {
                        JTable table = read(filePath);
                        JScrollPane jScrollPane = new JScrollPane(table);
                        swingNode.setContent(jScrollPane);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                //设置JTable打开后表格的相对位置
                GridPane.setConstraints(swingNode,0,1);
                    inputGridPane.getChildren().add(swingNode);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
        });
}
//读取csv文件并把它读取到JTable中返回
public static JTable read(String filePath) throws IOException {
 
            CsvReader reader = new CsvReader(filePath);
            reader.readHeaders();//跳过表头
            String[] head = reader.getHeaders();
 
            List<String []> list = new ArrayList<>();
            String s = reader.getRawRecord();
            System.out.println("表头 "+s);
            String[] r1 = dataToArray(s);
//            list.add(r1);
 
            while (reader.readRecord()) {
                System.out.println(reader.getRawRecord());
                list.add(dataToArray(reader.getRawRecord()));
            }
        String[][] data = new String[list.size()][];
        System.out.println("一共"+list.size()+"行数据");
        for (int i = 0; i < data.length; i++) {
            data[i] = list.get(i);
        }
            JTable table = new JTable(data,head);
            return table;
 
    }
//将每一行的数据从String转为String数组
    public static String[] dataToArray(String row){
        String[] res = row.split(",");
        return res;
    }

Effet display

Comment importer des fichiers CSV dans JTable pour les afficher à laide de Java

JScrollPane encapsule JTable, SwingNode encapsule JScrollPane

Comment importer des fichiers CSV dans JTable pour les afficher à laide de Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer