我正在制作一个应用程序,它处理存储在文本文件中的大量数据。本质上,应用程序浏览一个. txt文件,一旦找到,应用程序需要把文件中的所有数据放入JTable,然后我需要对数据执行一些过滤操作,然后将其导出。. txt文件中的数据格式如下:
Column1 Column2 Column3 Column4 Column5 Column6 .........(there are 510 columns)
A B C D E F
G H I J K L
.... ... ... ... .... ...
有数千行。每行由双类型数字组成(A、B……均为1.3、2.0等)
我通过手动添加数组中的所有列名,然后将表的模型设置为
table = new JTable();
table.setModel(new DefaultTableModel(null,columns));
//'columns' is a string array containing 510 names
我已经把行作为'空'在这里,因为我不知道我应该如何得到数据,并将其转换为2D数组,因为这是行的格式。此外,可能存在任意数量的行。我如何读取文本文件的代码如下:
btnBrowse.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
JFileChooser chooser = new JFileChooser();
int option = chooser.showOpenDialog(dpaGUI.this);
if (option == JFileChooser.APPROVE_OPTION)
{
file = chooser.getSelectedFile();
BufferedReader in = null;
try
{
in = new BufferedReader(new FileReader(file));
} catch (FileNotFoundException e)
{
e.printStackTrace();
}
try
{
while(in.ready())
{
//test operations performed with the retrieved text
}
}
catch (IOException e)
{
e.printStackTrace();
}
try
{
in.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
});
我试着执行一些测试操作,比如用“\t”分割检索到的文本(这就是它存储在文本文件中的方式),但到目前为止没有任何帮助。文本文件还包含列的名称,因此在填充行时需要删除这些列。任何关于如何将文本文件中的海量数据导入JTable的建议都会有所帮助。我使用JTable是因为我需要对整列数据(每列有数千行)执行进一步的操作。我愿意接受不同容器的建议。任何建议都会有帮助。谢谢!
如果您认为数据集太大,请尝试实现您自己的单元模型,而不是从AbstractTableModel派生。面向模型的方法的强大之处在于,只会从模型中请求总行数和屏幕上当前可见的单元格。因此,行数可能超过计算机内存的容量。最好使用数据库引擎作为后端。
试试这个。您可以使用接受列名和行数的构造函数,而不是将数据设置为null。将行设置为0,只需使用addRow
DefaultTableModel(Object[] cols, int rows)
请参阅DefaultTableModelAPI中的更多方法和构造函数。
使用您的特定代码,您可以使用我的方法创建DefaultTableModel
和use表。在您的
ActionListener中设置模型(模型)
文件
Column1 Column2 Column3 Column4 Column5 Column6
A B C D E F
G H I J K L
A B C D E F
G H I J K L
A B C D E F
G H I J K L
A B C D E F
G H I J K L
A B C D E F
G H I J K L
A B C D E F
G H I J K L
后果
密码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
public class TestTable5 {
public TestTable5() {
DefaultTableModel model = createModel("/resources/file.txt");
JTable table = new JTable(model);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private DefaultTableModel createModel(String filePath) {
DefaultTableModel model = null;
try {
BufferedReader txtReader = new BufferedReader(
new InputStreamReader(getClass().getResourceAsStream(filePath)));
String header = txtReader.readLine();
model = new DefaultTableModel(header.split("\\s+"), 0);
String line;
while((line = txtReader.readLine()) != null) {
model.addRow(line.split("\\s+"));
}
} catch (IOException ex) {
ex.printStackTrace();
}
return model;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestTable5();
}
});
}
}
您可以尝试使用
JFileChooser
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
public class TestTable5 {
public TestTable5() {
String[] defaultCols = {"COL", "COL", "COL", "COL", "COL", "COL"};
DefaultTableModel model = new DefaultTableModel(defaultCols, 0);
JTable table = new JTable(model);
JButton button = createButton(table);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new JScrollPane(table));
frame.add(button, BorderLayout.SOUTH);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JButton createButton(final JTable table) {
JButton button = new JButton("Get File");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
int result = chooser.showOpenDialog(table);
if (result == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
DefaultTableModel model = createModel(file);
table.setModel(model);
}
}
});
return button;
}
private DefaultTableModel createModel(File file) {
DefaultTableModel model = null;
try {
BufferedReader txtReader = new BufferedReader(
new FileReader(file));
String header = txtReader.readLine();
model = new DefaultTableModel(header.split("\\s+"), 0);
String line;
while ((line = txtReader.readLine()) != null) {
model.addRow(line.split("\\s+"));
}
} catch (IOException ex) {
ex.printStackTrace();
}
return model;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestTable5();
}
});
}
}
我正在阅读一个用一些分隔符分隔的文本文件。 我的文本文件内容示例 Avc def efg JKSJD 1 2 3 5 3 4 6 0 每次调用createRow和createCell时是否都会创建新对象? 如果是,有什么替代方案?。如何以更好的性能将大数据写入excel?
我有一个1.5GB.dat文件需要作为pandas数据帧导入,我遇到了内存问题(8GB RAM)。如何将dat文件分解成块来执行分析?
问题内容: 有没有办法将数据从JSON文件导入R?更具体地说,该文件是带有字符串字段,对象和数组的JSON对象的数组。关于如何处理此http://cran.r-project.org/web/packages/rjson/rjson.pdf,RJSON软件包尚不清楚。 问题答案: 首先安装软件包: 然后: 更新: 从0.2.1版本开始
我对Java非常陌生,因此遇到了很大的困难。这是我想做的,但似乎不太奏效。 请看附上的Java代码和文本文件(截图在链接)。 文本文件:
想要知道更多东西吗?当你需要从表中查找某些值时,可以使用冗长的 case 语句或 selectors 实现,但更整洁的方式是使用 extlookup 函数实现。 在 puppetmaster 上可以使用 extlookup 函数查询外部的 CSV 文件,并返回匹配的数据片段。 将所有数据组织到一个单一的文件并将它从 Puppet 配置清单中分离出来, 可以使维护工作变得更简单,也便于与其他人分享:
问题内容: 我想将包含字符串的巨大文件拆分为一组新的(较小)文件,并尝试使用nio2。 我不想将整个文件加载到内存中,因此我尝试了BufferedReader。 较小的文本文件应受文本行数的限制。 该解决方案有效,但是我想问一问,是否有人知道使用usion java 8(也许是带有stream()-api的lamdas)和nio2具有更好的性能的解决方案: 问题答案: 注意/ 及其子类的直接使用与