java - Java 中的 CSV 到表

标签 java csv

我正在寻找将数据从 CSV 文件放入表格的方法。 我的刷新率有问题。表格只打印一行。 如何更改此代码以在表中打印更多行? 因为在 CSV 文件中,我有 20 行或更多行。

import java.awt.Component;
import java.awt.Font;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.Reader;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class FileParser {
    String aFileToRead = "";

    public FileParser(String aNameOfFile) {
        this.aFileToRead = aNameOfFile;
    }

    public void readFileToObjects() {
        int comma1=0;
        int comma2=0;
        int comma3=0;
        int comma4=0;
        int comma5=0;
        int comma6=0;
        int comma7=0;
        int comma8=0;
        int comma9=0;
        int comma10=0;
        int comma11=0;
        int comma12=0;
        int comma13=0;
        int comma14=0;
        int comma15=0;
        int endOfLine=0;
        double aTemperature = 0.0;
        double aHumidity = 0.0;
        double aPressure = 0.0;
        double aOrientation_x = 0.0;
        double aOrientation_y = 0.0;
        double aOrientation_z = 0.0;
        double aMagnetic_x = 0.0;
        double aMagnetic_y = 0.0;
        double aMagnetic_z = 0.0;
        double aSpeed_x = 0.0;
        double aSpeed_y = 0.0;
        double aSpeed_z = 0.0;
        String aGyroscope_x = "";
        String aGyroscope_y = "";
        String aGyroscope_z = "";
        String aTime = "";
        String chartPositionAsString="";
        JFrame frame = new JFrame();


        try {
            String aStr = null;
            FileInputStream aFile = new FileInputStream(this.aFileToRead);
            InputStreamReader aInReader = new InputStreamReader(aFile);
            BufferedReader theBufReader = new BufferedReader(aInReader);
            while ((aStr = theBufReader.readLine()) != null) {
                comma1 = aStr.indexOf(",");
                chartPositionAsString = aStr.substring(0, comma1);
                aTemperature = Double.parseDouble(chartPositionAsString);

                comma2 = aStr.indexOf(",", comma1 + 1);
                chartPositionAsString = aStr.substring(comma1 + 1, comma2);
                aHumidity = Double.parseDouble(chartPositionAsString);

                comma3 = aStr.indexOf(",", comma2 + 1);
                chartPositionAsString = aStr.substring(comma2 + 1, comma3);
                aPressure = Double.parseDouble(chartPositionAsString);

                comma4 = aStr.indexOf(",", comma3 + 1);
                chartPositionAsString = aStr.substring(comma3 + 1, comma4);
                aOrientation_x = Double.parseDouble(chartPositionAsString);

                comma5 = aStr.indexOf(",", comma4 + 1);
                chartPositionAsString = aStr.substring(comma4 + 1, comma5);
                aOrientation_y = Double.parseDouble(chartPositionAsString);

                comma6 = aStr.indexOf(",", comma5 + 1);
                chartPositionAsString = aStr.substring(comma5 + 1, comma6);
                aOrientation_z = Double.parseDouble(chartPositionAsString);

                comma7 = aStr.indexOf(",", comma6 + 1);
                chartPositionAsString = aStr.substring(comma6 + 1, comma7);
                aMagnetic_x = Double.parseDouble(chartPositionAsString);

                comma8 = aStr.indexOf(",", comma7 + 1);
                chartPositionAsString = aStr.substring(comma7 + 1, comma8);
                aMagnetic_y = Double.parseDouble(chartPositionAsString);

                comma9 = aStr.indexOf(",", comma8 + 1);
                chartPositionAsString = aStr.substring(comma8 + 1, comma9);
                aMagnetic_z = Double.parseDouble(chartPositionAsString);

                comma10 = aStr.indexOf(",", comma9 + 1);
                chartPositionAsString = aStr.substring(comma9 + 1, comma10);
                aSpeed_x = Double.parseDouble(chartPositionAsString);

                comma11 = aStr.indexOf(",", comma10 + 1);
                chartPositionAsString = aStr.substring(comma10 + 1, comma11);
                aSpeed_y = Double.parseDouble(chartPositionAsString);

                comma12 = aStr.indexOf(",", comma11 + 1);
                chartPositionAsString = aStr.substring(comma11 + 1, comma12);
                aSpeed_z = Double.parseDouble(chartPositionAsString);

                comma13 = aStr.indexOf(",", comma12 + 1);
                chartPositionAsString = aStr.substring(comma12 + 1, comma13);
                aGyroscope_x = (chartPositionAsString);

                comma14 = aStr.indexOf(",", comma13 + 1);
                chartPositionAsString = aStr.substring(comma13 + 1, comma14);
                aGyroscope_y = (chartPositionAsString);

                comma15 = aStr.indexOf(",", comma14 + 1);
                chartPositionAsString = aStr.substring(comma14 + 1, comma15);
                aGyroscope_z = (chartPositionAsString);

                endOfLine = aStr.length();
                aTime = chartPositionAsString = aStr.substring(comma15 + 1, endOfLine);

               Env aEnv = new Env(aTemperature, aHumidity, aPressure, 
                                  aOrientation_x, aOrientation_y, aOrientation_z, 
                                  aMagnetic_x, aMagnetic_y, aMagnetic_z, aSpeed_x, aSpeed_y, aSpeed_z, 
                                  aGyroscope_x, aGyroscope_y, aGyroscope_z,
                                  aTime);

               String columnNames1[] = { "Temperature", "Humidity", "Pressure",
                    "Orientation yaw", "Orientation pitch", "Orientation roll", 
                       "Magnetic X", "Magnetic Y", "Magnetic Z",
                       "Speed X", "Speed Y", "Speed Z",
                       "Gyroscope X", "Gyroscope Y", "Gyroscope Z",
                       "Time" };    

                Object[][] rowData1 = {
                          {aEnv.getTemperature(), aEnv.getHumidity(), aEnv.getPressure(),
                           aEnv.getOrientation_x(), aEnv.getOrientation_y(), aEnv.getOrientation_z(), 
                           aEnv.getMagnetic_x(), aEnv.getMagnetic_y(), aEnv.getMagnetic_z(), 
                           aEnv.getSpeed_x(), aEnv.getSpeed_y(), aEnv.getSpeed_z(), 
                           aEnv.getGyroscope_x(), aEnv.getGyroscope_y(), aEnv.getGyroscope_z(),
                           aEnv.getTime(),}};

                JTable table = new JTable(rowData1, columnNames1);
                JScrollPane scrollPane = new JScrollPane(table);
                table.getTableHeader().setFont(new Font("Serif", Font.BOLD, 15));

                frame.add((Component) scrollPane, "Center");  

                frame.setTitle("Enviromental Data");
                frame.setDefaultCloseOperation(3);
                frame.setSize(1900, 100);
                frame.setVisible(true);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("The File is Not in The Correct Directory");
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }
}

最佳答案

你无缘无故地使用了很多变量。

List<String[]> rows = new ArrayList<>();
while ((aStr = theBufReader.readLine()) != null) {
    String[] dataLine = aStr.split(",");
    rows.add(dataLine);
}

然后,创建 JTable,您可能需要从列表中重新创建 Object[][]。或者查看此Populate JTable Using List

如果您确实需要将某些行转换为数字(用于格式化),您可以使用循环来转换这些列,使用包含列索引的数组并仅对这些列进行循环。

关于java - Java 中的 CSV 到表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40413530/

相关文章:

java - BOS/BIS 取得进展

java - 将 JDBI @BindBean 与 AutoValue 结合使用

java - AndroidX 抽屉导航

python - 如何有效地搜索DataFrame中的值并将其放入另一个DataFrame中

Java:Windows和Linux中的不同字符编码

JAVA:是否可以在循环外使用已在循环内初始化的变量?

Powershell 格式表转 CSV

powershell - 像数组一样对 powershell Import-Csv 行进行索引

java - 如何将 Treemap 写为 csv

java - 我对ScheduledThreadPoolExecutor.scheduleAtFixedRate和可能的并发感到困惑。为什么会有线程池?