0

我有一个从文件夹中读取多个文本文件的代码,我需要将它们放在一个表中。到目前为止,一切都很好,除了我的文本文件中的每一行都显示在不同的表中。我知道问题是表格分别接收每一行。我尝试创建一个对象并填充它,然后在表格内部调用,但我无法让它工作,所以如果有人能告诉我解决方案会很棒。我还需要能够比较这些值并找到一个平均值,所以如果你有任何提示,那就太好了

这是我的文本文件的示例

17/10/2012 10:00:06.67 [RX] - E usbR<LF>
817EE765FF53-53<LF>
817AA765FF53-34<LF>
817CC765FF53-25<LF>
00<LF>
E qEnd<LF>

这就是我需要在桌子上得到的

    ID             RSSI
817EE765FF53        53
817AA765FF53        34
817CC765FF53        25

这是代码

import java.awt.BorderLayout;
import java.io.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class Foldersearch1

{

  public static void main(String[] args) 
  {
    // Directory path here
    String path = "C:/Users/Nikica/Desktop/text files"; 

    String files;
    File folder = new File(path);
    File[] listOfFiles = folder.listFiles(); 

    for (int i = 0; i < listOfFiles.length; i++) 
    {
      if (listOfFiles[i].isFile()) 
      {
        files = listOfFiles[i].getName();
        if (files.endsWith(".txt") || files.endsWith(".TXT"))
        {

          System.out.println(files);
          (); 

          String currentLine="";

          File textFile = new File(folder.getAbsolutePath() + File.separator + files); 
          try{
            // Open the file that is the first 
            // command line parameter
            FileInputStream fstream = new FileInputStream(textFile);
            try (DataInputStream in = new DataInputStream(fstream)) {
              BufferedReader br = new BufferedReader(new         InputStreamReader(in));
              String strLine;
              String line;
              //Read File Line By Line
              // int p=0;
              // Object[][] Table=null;
              while ((strLine = br.readLine()) != null)   {
                processLine(strLine);
                Table(strLine);

                // Print the content on the console
                //System.out.println (strLine);
              }


            }
          }catch (Exception e){//Catch exception if any
            System.err.println("Error: " + e.getMessage());
          }
        }
      }
    }
  }
  public static void processLine(String line) {
    // skip header & footer


    if (line.startsWith("17/10/2012 10:00:06.67 [RX] - E usbR<LF>") || line.startsWith("E qEnd<LF>")) {return;}


    String ID = line.substring(0, 12);
    String RSSI = line.substring(13, 15);


    System.out.println("ID [" + ID + "]\t RSSI [" + RSSI +"]");

  }
  public static void Table(String line) {
    JFrame frame = new JFrame("proba");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    if (line.startsWith("17/10/2012 10:00:06.67 [RX] - E usbR<LF>") || line.startsWith("E qEnd<LF>")) return;
    String ID = line.substring(0, 12);
    String RSSI = line.substring(13, 15);

    Object rowData[][] = { { ID, RSSI } };
    Object columnNames[] = { "ID", "RSSI" };
    JTable table = new JTable(rowData, columnNames);

    JScrollPane scrollPane = new JScrollPane(table);
    frame.add(scrollPane, BorderLayout.CENTER);
    frame.setSize(300, 150);
    frame.setVisible(true);
  }
}
4

1 回答 1

3

要使您的代码以最少的更改工作,请使用行数据创建一个向量,并使用构造函数 public JTable(Vector rowData, Vector columnNames)。以下代码片段应该让您了解如何执行此操作。

Vector<String> columnNames = new Vector<String>();
columnNames.add("ID");
columnNames.add("RSSI");

Vector<Vector<String>> rowData = new Vector<Vector<String>>();

for(int i=0; i<20; i++) {
    Vector<String> row = new Vector<String>();
    row.add("ID_" + i);
    row.add("RSSI_" + i);
    rowData.add(row);
}

JTable table = new JTable(rowData, columnNames);
于 2012-10-26T10:26:04.527 回答