如何使用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美觀與否取決於你的系統版本。
d.CsvReader類: javacsv-2.0.jar 套件下的一個工具類,主要透過它來對csv檔案進行操作
e.JTable類:建立一個JTable實例做csv文件打開後的展示,需要注意參數的順序,表格內容是一個二維數組,表頭是一個一維數組
JTable table = new JTable(表格内容,表头);
登入後複製
f. 把一位數組存進一維數組:
String[][] arr = new String[10][];//开辟一个10行的二维数组 String[] row1 = {"id","name","sex","age"}; arr[0] = row1;//存进二维数组
登入後複製
g. JTable不顯示表頭:需要把JTable物件放進一個Pane裡
JTable table = new JTable(表内容,表头); JScrollPane jScrollPane = new JScrollPane(table); SwingNode swingNode = new SwingNode(); swingNode.setContent(jScrollPane);//使用swingNode封装swing组件,就可以在Javafx中用了
登入後複製
CsvReader的主要方法
new CsvReader(String filePath) 初始化構造時需要傳入一個本機csv檔案位址
boolean readHeaders() 讀取表頭並跳過
- ##String[] getHeaders()取得csv檔案表頭(很奇怪,需要readHeaders()方法呼叫過後,才能取得到,不然報空指標異常)
CsvReader reader = new CsvReader("xxx.csv"); reader.readHeaders(); //没有这句话,执行下面会报错 String[] head = reader.getHeaders();
登入後複製
- boolean readRecord() 讀取一行csv內容,只要你呼叫了,下次再呼叫就會切換到csv的下一行,通常我們使用一個while循環來及時把所有內容一行行進行操作
- String getRawRecord() 讀取一行資料
while (reader.readRecord()){ System.out.println(reader.getRawRecord());//输出一行内容 }
登入後複製
@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;
}
登入後複製效果展示
@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; }
登入後複製
以上是如何使用Java將CSV檔案匯入JTable進行展示的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)