最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何將Java打開(kāi)CSV文件到JTable展示

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

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

概述

主要知識(shí)點(diǎn)

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

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

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

d.CsvReader類(lèi) : javacsv-2.0.jar 包下的一個(gè)工具類(lèi),主要通過(guò)它來(lái)對(duì)csv文件進(jìn)行操作

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

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

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

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

g. JTable不顯示表頭:需要把JTable對(duì)象放進(jìn)一個(gè)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)造時(shí)需要傳入一個(gè)本地csv文件地址
  • boolean readHeaders() 讀取表頭并跳過(guò)
  • String[] getHeaders() 獲取csv文件表頭(很奇怪,需要readHeaders()方法調(diào)用過(guò)后,才能獲取到,不然報(bào)空指針異常)

也就是這樣:

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

實(shí)例 - 讀取本地桌面的一個(gè)csv文件

@Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("文件選擇器");
        primaryStage.setHeight(600);
        primaryStage.setWidth(800);
 
        final FileChooser fileChooser = new FileChooser();
 
        //設(shè)置打開(kāi)資源管理器后的文件過(guò)濾
        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("打開(kāi)文件");
 
        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)建一個(gè)垂直盒子布局器
        rootGroup.getChildren().addAll(inputGridPane);//把格子面板放進(jìn)來(lái)
        rootGroup.setPadding(new Insets(12,12,12,12));
 
        primaryStage.setScene(new Scene(rootGroup));
        primaryStage.show();
 
//設(shè)置點(diǎn)擊-打開(kāi)文件-的動(dòng)作事件
open.setOnAction(event -> {
            File file = fileChooser.showOpenDialog(primaryStage);//在當(dāng)前窗口打開(kāi)文件選擇器
            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打開(kāi)后表格的相對(duì)位置
                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();//跳過(guò)表頭
            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打開(kāi)CSV文件到JTable展示的文章就介紹到這了,更多相關(guān)Java打開(kāi)CSV文件到JTable內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot實(shí)現(xiàn)接口傳輸加解密的步驟詳解

    Springboot實(shí)現(xiàn)接口傳輸加解密的步驟詳解

    這篇文章主要給大家詳細(xì)介紹了Springboot實(shí)現(xiàn)接口傳輸加解密的操作步驟,文中有詳細(xì)的圖文解釋和代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09
  • mybatis-plus?實(shí)現(xiàn)查詢表名動(dòng)態(tài)修改的示例代碼

    mybatis-plus?實(shí)現(xiàn)查詢表名動(dòng)態(tài)修改的示例代碼

    通過(guò)MyBatis-Plus實(shí)現(xiàn)表名的動(dòng)態(tài)替換,根據(jù)配置或入?yún)⑦x擇不同的表,本文主要介紹了mybatis-plus?實(shí)現(xiàn)查詢表名動(dòng)態(tài)修改的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • Spring cloud 限流的多種方式

    Spring cloud 限流的多種方式

    在頻繁的網(wǎng)絡(luò)請(qǐng)求時(shí),服務(wù)有時(shí)候也會(huì)受到很大的壓力,尤其是那種網(wǎng)絡(luò)攻擊,非法的。這樣的情形有時(shí)候需要作一些限制。本文主要介紹了兩種限流方法,感興趣的可以了解一下
    2021-06-06
  • Java操作mongodb增刪改查的基本操作實(shí)戰(zhàn)指南

    Java操作mongodb增刪改查的基本操作實(shí)戰(zhàn)指南

    MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù),由c++語(yǔ)言編寫(xiě),旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案,下面這篇文章主要給大家介紹了關(guān)于Java操作mongodb增刪改查的基本操作實(shí)戰(zhàn)指南,需要的朋友可以參考下
    2023-05-05
  • 基于ScheduledExecutorService的兩種方法(詳解)

    基于ScheduledExecutorService的兩種方法(詳解)

    下面小編就為大家?guī)?lái)一篇基于ScheduledExecutorService的兩種方法(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 謹(jǐn)慎使用Java8的默認(rèn)方法

    謹(jǐn)慎使用Java8的默認(rèn)方法

    為什么要謹(jǐn)慎使用Java8的默認(rèn)方法?本文給出了為什么要慎用Java8默認(rèn)方法的原因,解釋的很詳細(xì),感興趣的朋友可以參考一下
    2016-01-01
  • MyBatis中的接口代理機(jī)制及其使用方式

    MyBatis中的接口代理機(jī)制及其使用方式

    這篇文章主要介紹了MyBatis中的接口代理機(jī)制及其使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 關(guān)于Java 并發(fā)的 CAS

    關(guān)于Java 并發(fā)的 CAS

    后端開(kāi)發(fā)鎖成為一個(gè)不可避免的話題,今天我們討論的是與之對(duì)應(yīng)的無(wú)鎖 CAS。本文會(huì)從怎么來(lái)的、是什么、怎么用、原理分析、遇到的問(wèn)題等不同的角度帶你真正搞懂 CAS。
    2021-09-09
  • 淺談System.getenv()和System.getProperty()的區(qū)別

    淺談System.getenv()和System.getProperty()的區(qū)別

    這篇文章主要介紹了System.getenv()和System.getProperty()的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring?Boot?應(yīng)用的熱部署配置方法

    Spring?Boot?應(yīng)用的熱部署配置方法

    熱部署,簡(jiǎn)單來(lái)說(shuō),就是代碼修改后不需重啟項(xiàng)目就可自動(dòng)加載出新的內(nèi)容,這篇文章主要介紹了Spring?Boot?應(yīng)用的熱部署配置?,需要的朋友可以參考下
    2022-11-11

最新評(píng)論

信阳市| 如东县| 湄潭县| 建水县| 舟曲县| 肇东市| 六枝特区| 东光县| 渝中区| 赞皇县| 阿城市| 武汉市| 全州县| 赫章县| 常山县| 鹿邑县| 漾濞| 肃宁县| 桐柏县| 龙南县| 虹口区| 黎城县| 万山特区| 绥滨县| 彰化县| 丹巴县| 晋中市| 丰城市| 徐汇区| 新蔡县| 泾川县| 四会市| 宁晋县| 寿光市| 敦煌市| 车致| 翁源县| 吉林市| 蓝田县| 资中县| 荥经县|