欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何將Java打開CSV文件到JTable展示

 更新時間:2023年03月31日 08:57:47   作者:興奮的大公狗  
本文主要介紹了如何將Java打開CSV文件到JTable展示,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

本文主要介紹了如何將Java打開CSV文件到JTable展示,廢話不多說,具體如下:

概述

主要知識點

a.SwingNode類 :把Java swing組件封裝成一個JavaFX的Node,使得Java Swing可以和JavaFX嵌套在一起使用,JavaSwing賊丑,但操作簡單,JavaFX的表格組件(TableView等)有點復雜,所以選擇嵌套JavaSwing來使用,丑就丑吧

b.javacsv-2.0.jar: 用于通過文件地址讀取csv文件,并可以進行一系列操作.盡管2008年之后就不再更新,但操作個csv文件也夠用了。

c.FileChoose類 :JavaFX的一個文件選擇器,可以打開本機的資源管理器,UI美觀與否取決于你的系統(tǒng)版本。

d.CsvReader類 : javacsv-2.0.jar 包下的一個工具類,主要通過它來對csv文件進行操作

e.JTable類:創(chuàng)建一個JTable實例做csv文件打開后的展示,需要注意參數(shù)的順序,表格內(nèi)容是一個二維數(shù)組,表頭是一個一維數(shù)組

JTable table = new JTable(表格內(nèi)容,表頭);

f. 把一位數(shù)組存進一維數(shù)組:

String[][] arr = new String[10][];//開辟一個10行的二維數(shù)組
String[] row1 = {"id","name","sex","age"};
 
arr[0] = row1;//存進二維數(shù)組

g. JTable不顯示表頭:需要把JTable對象放進一個Pane里

JTable table = new JTable(表內(nèi)容,表頭);
JScrollPane jScrollPane = new JScrollPane(table);
 
SwingNode swingNode = new SwingNode();
swingNode.setContent(jScrollPane);//使用swingNode封裝swing組件,就可以在Javafx中用了

CsvReader的主要方法

  • new CsvReader(String filePath) 初始化構(gòu)造時需要傳入一個本地csv文件地址
  • boolean readHeaders() 讀取表頭并跳過
  • String[] getHeaders() 獲取csv文件表頭(很奇怪,需要readHeaders()方法調(diào)用過后,才能獲取到,不然報空指針異常)

也就是這樣:

CsvReader reader = new CsvReader("xxx.csv");
reader.readHeaders(); //沒有這句話,執(zhí)行下面會報錯
String[] head = reader.getHeaders();
  • boolean readRecord() 讀取一行csv內(nèi)容,只要你調(diào)用了,下次再調(diào)用就會切換到csv的下一行,通常我們使用一個while循環(huán)來及時把所有內(nèi)容一行行進行操作
  • String getRawRecord() 讀取一行數(shù)據(jù)
while (reader.readRecord()){
    System.out.println(reader.getRawRecord());//輸出一行內(nèi)容
}

實例 - 讀取本地桌面的一個csv文件

@Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("文件選擇器");
        primaryStage.setHeight(600);
        primaryStage.setWidth(800);
 
        final FileChooser fileChooser = new FileChooser();
 
        //設(shè)置打開資源管理器后的文件過濾
        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();//創(chuàng)建格子布局面板
        GridPane.setConstraints(open,0,0);//第0行0列
 
        inputGridPane.setHgap(6.0);//設(shè)置水平間距
        inputGridPane.setVgap(6.0);//設(shè)置垂直間距
        inputGridPane.getChildren().addAll(open);//添加按鈕
 
        final Pane rootGroup = new VBox(12);//創(chuàng)建一個垂直盒子布局器
        rootGroup.getChildren().addAll(inputGridPane);//把格子面板放進來
        rootGroup.setPadding(new Insets(12,12,12,12));
 
        primaryStage.setScene(new Scene(rootGroup));
        primaryStage.show();
 
//設(shè)置點擊-打開文件-的動作事件
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();
                    }
                //設(shè)置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()+"行數(shù)據(jù)");
        for (int i = 0; i < data.length; i++) {
            data[i] = list.get(i);
        }
            JTable table = new JTable(data,head);
            return table;
 
    }
//將每一行的數(shù)據(jù)從String轉(zhuǎn)為String數(shù)組
    public static String[] dataToArray(String row){
        String[] res = row.split(",");
        return res;
    }

效果展示

JScrollPane封裝JTable,SwingNode封裝JScrollPane

 到此這篇關(guān)于如何將Java打開CSV文件到JTable展示的文章就介紹到這了,更多相關(guān)Java打開CSV文件到JTable內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java常用工具類 Date日期、Mail郵件工具類

    java常用工具類 Date日期、Mail郵件工具類

    這篇文章主要為大家詳細介紹了java常用工具類,包括Date日期、Mail郵件工具類,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Java版微信公眾號支付開發(fā)全過程

    Java版微信公眾號支付開發(fā)全過程

    這篇文章主要介紹了Java版微信公眾號支付開發(fā)全過程,本文通過實例相結(jié)合給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • 5分鐘快速學會spring boot整合Mybatis的方法

    5分鐘快速學會spring boot整合Mybatis的方法

    這篇文章主要給大家介紹了如何通過5分鐘快速學會spring boot整合Mybatis的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-12-12
  • SpringBoot核心@SpringBootApplication使用介紹

    SpringBoot核心@SpringBootApplication使用介紹

    這篇文章主要介紹了SpringBoot核心@SpringBootApplication的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java多線程鎖機制相關(guān)原理實例解析

    Java多線程鎖機制相關(guān)原理實例解析

    這篇文章主要介紹了Java多線程鎖機制相關(guān)原理實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 解決Mybatis-Plus更新方法不更新NULL字段的問題

    解決Mybatis-Plus更新方法不更新NULL字段的問題

    這篇文章主要介紹了解決Mybatis-Plus更新方法不更新NULL字段的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java設(shè)計模式之適配器模式的示例詳解

    Java設(shè)計模式之適配器模式的示例詳解

    適配器模式,即將某個類的接口轉(zhuǎn)換成客戶端期望的另一個接口的表示,主要目的是實現(xiàn)兼容性,讓原本因為接口不匹配,沒辦法一起工作的兩個類,可以協(xié)同工作。本文將通過示例詳細介紹適配器模式,需要的可以參考一下
    2022-08-08
  • Java實現(xiàn)學生信息管理系統(tǒng)(使用數(shù)據(jù)庫)

    Java實現(xiàn)學生信息管理系統(tǒng)(使用數(shù)據(jù)庫)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)學生信息管理系統(tǒng),使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Spring Boot Admin郵件警報整合過程解析

    Spring Boot Admin郵件警報整合過程解析

    這篇文章主要介紹了Spring Boot Admin郵件警報整合過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • mybatis批量插入返回主鍵失敗的坑及解決

    mybatis批量插入返回主鍵失敗的坑及解決

    這篇文章主要介紹了mybatis批量插入返回主鍵失敗的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論