读取.csv文件时出现java.io.FileNotFoundException

时间:2014-10-31 23:07:26

标签: java applet java-io filenotfoundexception

我应该创建一个java applet项目,并且我需要从.csv文件中读取数据并将其放在可滚动的表中。我试图dothat,我得到一个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位于根文件夹中。我尝试阅读一个正常的非摇摆项目,它可以工作但不是这个。谁能帮我?

1 个答案:

答案 0 :(得分:1)

我可以想到两个潜在的问题:

  1. 小程序无法读取位于Web服务器上的文件。
  2. 如果文件打包在jar文件中,则需要特殊代码才能读取它。具体来说,您需要一个ClassLoader的getResourceAsStream。
  3. 对于第二种,获取ClassLoader getResourceAsStream的最简单方法是致电Class的{​​{3}}。

    我还没有测试过,但这样的事情应该有效:

    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