如何使用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());//输出一行内容 }
实例 - 读取本地桌面的一个csv文件
@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进行展示的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

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

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处
