>  기사  >  Java  >  Java를 사용하여 표시하기 위해 CSV 파일을 JTable로 가져오는 방법

Java를 사용하여 표시하기 위해 CSV 파일을 JTable로 가져오는 방법

WBOY
WBOY앞으로
2023-04-21 23:34:061011검색

개요

주요 지식 포인트

a.SwingNode 클래스: Java Swing 구성 요소를 JavaFX 노드로 캡슐화하여 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 클래스: csv 파일을 연 후 표시하려면 JTable 인스턴스를 생성해야 합니다. 매개변수 주의 순서대로 테이블 내용은 2차원 배열이고 헤더는 1차원 배열

JTable table = new JTable(表格内容,表头);

f입니다. 한 자리 배열을 1차원 배열에 저장합니다:

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의 기본 메소드에 넣어야 합니다. 새로운 CsvReader(String filePath)는 초기화 구성 중에 로컬 csv 파일 주소를 전달해야 합니다

  • boolean readHeaders()는 헤더를 읽고 건너뜁니다.

  • String[] getHeaders()는 csv 파일의 헤더를 가져옵니다(매우 이상합니다. 가져오기 전에 readHeaders() 메서드를 호출해야 합니다. 그렇지 않으면 null입니다. 포인터 예외가 보고됩니다)

그렇습니다:

CsvReader reader = new CsvReader("xxx.csv");
reader.readHeaders(); //没有这句话,执行下面会报错
String[] head = reader.getHeaders();
  • boolean readRecord() csv 내용의 한 줄을 읽으면 다음에 호출할 때 다음 줄로 전환됩니다. 일반적으로 우리는 while 루프를 사용하여 모든 내용을 한 줄씩 시간에 맞춰 작업합니다

  • String getRawRecord() 한 줄 읽기 Data

while (reader.readRecord()){
    System.out.println(reader.getRawRecord());//输出一行内容
}

Instance - 로컬 데스크톱에서 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;
    }

Effect display

Java를 사용하여 표시하기 위해 CSV 파일을 JTable로 가져오는 방법

JScrollPane은 JTable을 캡슐화하고, SwingNode는 JScrollPane

Java를 사용하여 표시하기 위해 CSV 파일을 JTable로 가져오는 방법

을 캡슐화합니다.

위 내용은 Java를 사용하여 표시하기 위해 CSV 파일을 JTable로 가져오는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제