我应该创建一个 java applet 项目,并且我需要从 .csv 文件读取数据并将其放入可滚动表中。我尝试这样做,但收到 FileNotFoundException 异常。
这是我的代码:
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];
}
}
products.csv 位于根文件夹中。我尝试在正常的非 Swing 项目中阅读,它有效,但不适用于此。谁能帮我?
最佳答案
我可以想到两个潜在的问题:
- 小程序无法读取位于网络服务器上的文件。
- 如果文件打包在 jar 文件中,则需要特殊代码才能读取它。具体来说,您需要一个 ClassLoader 的 getResourceAsStream。
对于第二个,获取ClassLoader
的getResourceAsStream
的最简单方法是调用Class
的getResourceAsStream
.
我还没有测试过,但类似这样的东西应该可以工作:
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/我的/boomstick/Products.csv
)
关于读取 .csv 文件时出现 java.io.FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26684676/