如何将Java打开CSV文件到JTable展示

目录
  • 概述
    • 主要知识点
    • CsvReader的主要方法
  • 实例 - 读取本地桌面的一个csv文件

本文主要介绍了如何将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展示的文章就介绍到这了,更多相关Java打开CSV文件到JTable内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java导出csv方法实现讲解

    首先,通过ibatis中的sql语句查询出所要得到的记录,并将其存放在List中: 复制代码 代码如下: List<?> results = this.reportService.getArrayBeanReportDataSource(super.getQuery_sql_csv(), query_obj); 这样的情况下,因为我们是要写公共方法,所以使用?而没有使用一个确定的类型来标注. 所以才需要使用反射从List里取出的对象的属性值. 复制代码 代码如下: String[] Colum

  • java实现CSV文件导入与导出功能

    年前在开发功能模块的时候用到了CSV文件导入导出,就此整理一下,便于大家参考. 导入导出功能很多时候用到的都是Excel文件,但是现在越来越多的使用了CSV文件进行此操作,它是一个纯文本文件,可以用记事本打开,也可以用Excel打开.CSV文件不像Excel那样有很多条条框框,它使用硬回车分割每条记录,用逗号分隔每条数据的字段. CSV格式的文件就是用硬回车和文本都好实现的表格,用Excel一读就成了表格.文件名后缀就是 .csv. 直接上代码吧! 导入部分 导入的时候基于Ajax请求,js代码

  • Java生成CSV文件实例详解

    本文实例主要讲述了Java生成CSV文件的方法,具体实现步骤如下: 1.新建CSVUtils.java文件: package com.saicfc.pmpf.internal.manage.utils; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputS

  • Java导出CSV文件的方法

    本文实例为大家分享了Java导出CSV文件的具体代码,供大家参考,具体内容如下 Java导出csv文件: 控制层: @Controller @RequestMapping("/historyReport/") public class HistoryStockReportController { private static final Logger LOGGER = LoggerFactory.getLogger(HistoryStockReportController.class)

  • Javacsv实现Java读写csv文件

    今天跟大家分享一个利用外部Jar包来实现Java操作CSV文件 一.资源下载 1.直接下载Jar包:javacsv-2.0.jar 2.利用Maven下载Jar包: <dependency> <groupId>net.sourceforge.javacsv</groupId> <artifactId>javacsv</artifactId> <version>2.0</version> </dependency>

  • java读取csv文件内容示例代码

    复制代码 代码如下: package com.huateng.readcsv; import java.io.BufferedReader;import java.io.FileReader;import java.util.ArrayList;import java.util.Iterator;import java.util.List; public class CsvUtil {        private String fileName = null;        private B

  • java读取csv文件和写csv示例分享

    复制代码 代码如下: import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.

  • java导出生成csv文件的方法

    首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分隔的,对比如下图: txt中显示: 修改文件后缀为csv后显示如下: 在java中我们一般使用poi操作excel,导入,导出都可以,但是poi很消耗内存,尤其在导出时,这个时候我们其实可以选择导出生成csv文件,因为其跟文本差不多,所以效率很高. 简单写了一个实现类,代码如下: /** * * 导出生成csv格式的文件 * @author ccg * @param titles

  • 如何将Java打开CSV文件到JTable展示

    目录 概述 主要知识点 CsvReader的主要方法 实例 - 读取本地桌面的一个csv文件 本文主要介绍了如何将Java打开CSV文件到JTable展示,废话不多说,具体如下: 概述 主要知识点 a.SwingNode类 :把Java swing组件封装成一个JavaFX的Node,使得Java Swing可以和JavaFX嵌套在一起使用,JavaSwing贼丑,但操作简单,JavaFX的表格组件(TableView等)有点复杂,所以选择嵌套JavaSwing来使用,丑就丑吧 b.javacs

  • JAVA导出CSV文件实例教程

    以前导出总是用POI导出为Excel文件,后来当我了解到CSV以后,我发现速度飞快. 如果导出的数据不要求格式.样式.公式等等,建议最好导成CSV文件,因为真的很快. 虽然我们可以用Java再带的文件相关的类去操作以生成一个CSV文件,但事实上有好多第三方类库也提供了类似的功能. 这里我们使用apache提供的commons-csv组件 Commons CSV 文档在这里 http://commons.apache.org/ http://commons.apache.org/proper/co

  • Java 导出 CSV 文件操作详情

    首先第一步 导入坐标: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.6</version> </dependency> 第二步 引入工具类 说明下 因为这个工具类用到是Listj集合我就顺带吧 实体类和map 之间的转换也说了 import org.apach

  • java读取csv文件示例分享(java解析csv文件)

    复制代码 代码如下: import java.io.*;import java.util.*;public class HandleCsv {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(   new InputStreamReader(    new FileInputStream("test.csv")   )); String li

  • java处理csv文件上传示例详解

    前言:示例只是做了一个最最基础的上传csv的示例,如果要引用到代码中去,还需要根据自己的业务自行添加一些逻辑处理. ReadCsvUtil工具类 package com.hanfengyeqiao.gjb.utils; import java.io.*; import java.util.*; /** * csv工具类 */ public class ReadCsvUtil { private static final String FIX="\uFEFF"; /** * 获取csv文

随机推荐