【发布时间】:2012-01-26 21:20:40
【问题描述】:
我正在尝试用逗号替换文件中的字符 ( and ),以便我可以使用下面的代码将数据从 csv 文件输入到 JTable。我试图通过使用StringTokenizer 读取文件来做到这一点,并且我尝试操纵我实现它的方式,但我无法让它与NullPointerException 一起运行。我知道它找不到它指向的对象,但我看不出我的问题出在哪里。任何指针都会很棒,因为我已经坚持了几个小时。使用StringTokenizer 阅读的想法是最好的还是有更好的方法?产生的错误如下。
此模型中还包含另外两个类,但是当替换括号部分被注释掉时,它们不会返回错误。
package initial;
import javax.swing.table.*;
import java.io.*;
import java.util.*;
@SuppressWarnings("serial")
public class DisplayTableModel extends AbstractTableModel {
protected Vector<String> data;
protected Vector<String> columnNames;
protected String datafile;
public DisplayTableModel(String f) {
datafile = f;
fileImport();
}
public void fileImport() {
String aLine;
data = new Vector<String>();
columnNames = new Vector<String>();
try {
FileInputStream fin = new FileInputStream(datafile);
BufferedReader br = new BufferedReader(new InputStreamReader(fin));
aLine = br.readLine();
String strReplace = ")";
br.readLine().replaceAll(strReplace, ",");
StringTokenizer Yearquote = new StringTokenizer(aLine, ")");
columnNames.addElement(Yearquote.nextToken());
StringTokenizer st1 = new StringTokenizer(br.readLine(), ",");
while (st1.hasMoreTokens()) {
columnNames.addElement(Yearquote.nextToken());
}
// extract data
while (aLine != null) {
if (aLine.startsWith("\"")) {
StringTokenizer addquote = new StringTokenizer(aLine, "\"");
data.addElement(addquote.nextToken());
StringTokenizer st2 = new StringTokenizer(addquote
.nextToken(), ",");
while (st2.hasMoreTokens()) {
data.addElement(st2.nextToken());
}
} else {
StringTokenizer st2 = new StringTokenizer(aLine, ",");
while (st2.hasMoreTokens()) {
data.addElement(st2.nextToken());
}
}
}
br.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
public int getRowCount() {
return data.size() / getColumnCount();
}
public int getColumnCount() {
return columnNames.size();
}
public String getColumnName(int columnIndex) {
String colName = "";
if (columnIndex <= getColumnCount()) {
colName = columnNames.elementAt(columnIndex);
}
return colName;
}
public Class<String> getColumnClass(int columnIndex) {
return String.class;
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return data.elementAt((rowIndex * getColumnCount()) + columnIndex);
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
return;
}
}
【问题讨论】:
标签: java file-io jtable bufferedreader stringtokenizer