读取.csv文件时java.io.FileNotFoundException
我应该创建一个java小程序项目,在这个项目中,我需要从.csv文件中读取数据,并将其放入一个可滚动的表中。我试着这么做,结果得到一个FileNotFoundException 这是我的密码:读取.csv文件时java.io.FileNotFoundException,java,applet,java-io,filenotfoundexception,Java,Applet,Java Io,Filenotfoundexception,我应该创建一个java小程序项目,在这个项目中,我需要从.csv文件中读取数据,并将其放入一个可滚动的表中。我试着这么做,结果得到一个FileNotFoundException 这是我的密码: import java.applet.Applet; import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import ja
import java.applet.Applet;
import java.awt.BorderLayout;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
@SuppressWarnings("serial")
public class Test extends Applet
{
Table table;
public void init()
{
try
{
table = new Table();
}
catch (Exception e)
{
e.printStackTrace();
}
this.add(table);
}
}
class Table extends JPanel
{
private String[][] productList;
private JTable table;
public Table() throws Exception
{
read();
BorderLayout layout = new BorderLayout();
layout.addLayoutComponent(new JScrollPane(table), BorderLayout.CENTER);
setLayout(layout);
}
private void read() throws Exception
{
ArrayList<String[]> list = new ArrayList<String[]>();
try
{
BufferedReader br = new BufferedReader(new FileReader("Products.csv"));
String line = br.readLine();
while ((line = br.readLine()) != null)
{
String[] toBeAdded = line.split(",");
list.add(toBeAdded);
}
}
catch (Exception e)
{
e.printStackTrace();
}
productList = new String[list.size()][3];
for (int i = 0; i < productList.length; i++)
for (int j = 0; j < productList[i].length; j++)
productList[i][j] = list.get(i)[j];
}
}
import java.applet.applet;
导入java.awt.BorderLayout;
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.util.ArrayList;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
@抑制警告(“串行”)
公共类测试扩展Applet
{
表格;
公共void init()
{
尝试
{
table=新表();
}
捕获(例外e)
{
e、 printStackTrace();
}
增加(表);
}
}
类表扩展了JPanel
{
私有字符串[][]productList;
专用JTable表;
public Table()引发异常
{
read();
BorderLayout=新的BorderLayout();
addLayoutComponent(新的JScrollPane(表),BorderLayout.CENTER);
设置布局(布局);
}
私有void read()引发异常
{
ArrayList=新建ArrayList();
尝试
{
BufferedReader br=新的BufferedReader(新文件阅读器(“Products.csv”);
String line=br.readLine();
而((line=br.readLine())!=null)
{
字符串[]tobeaded=line.split(“,”);
列表。添加(带标题);
}
}
捕获(例外e)
{
e、 printStackTrace();
}
productList=新字符串[list.size()][3];
for(int i=0;i
products.csv位于根文件夹中。我试着在一个普通的非swing项目中阅读,它是有效的,但不适用于这个项目。有人能帮我吗 我能想到两个潜在的问题:
ClassLoader
的getResourceAsStream
的最简单方法是调用Class
我还没有测试过,但类似的东西应该可以工作:
BufferedReader br = new BufferedReader(new InputStreamReader(Table.class.getResourceAsStream("/Products.csv")));
如果无法编译,请将Table.class
更改为this.getClass()
请注意,
/
表示Products.csv位于.jar文件的根目录下。否则,它将使用包名作为目录进行查找(即,如果包是package this.is.my.boomstick;
,它将尝试打开this/is/my/boomstick/Products.csv
)我尝试过,它说没有这样的构造函数BufferedReader(InputStream)@HridayamBakshi对,我错了。。。您需要先将其包装在InputStreamReader中。。。我马上就搞定我的答案。编辑:现在应该修复。它正在抛出NullPointerException“它正在抛出NullPointerException”您似乎将此问答网站误认为是帮助台。如果需要,请问一个新问题。@andreThompson好吧,NPE很可能是因为Table.class.getResourceAsStream没有找到有问题的文件,这意味着这个答案在某种形式上是错误的。