您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“怎么將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中用了
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; }
效果展示
JScrollPane封裝JTable,SwingNode封裝JScrollPane
讀到這里,這篇“怎么將Java打開CSV文件到JTable展示”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。