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

标签 java applet java-io filenotfoundexception

我应该创建一个 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 项目中阅读,它有效,但不适用于此。谁能帮我?

最佳答案

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

  1. 小程序无法读取位于网络服务器上的文件。
  2. 如果文件打包在 jar 文件中,则需要特殊代码才能读取它。具体来说,您需要一个 ClassLoader 的 getResourceAsStream。

对于第二个,获取ClassLoadergetResourceAsStream的最简单方法是调用ClassgetResourceAsStream .

我还没有测试过,但类似这样的东西应该可以工作:

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/

相关文章:

java - 小程序异常 : java. lang.ClassNotFoundException

java - 通过 EL 在 spring XML 中导入 spring 配置文件

java - 大于 127 的字节值

java - getClassLoader().getResource() 返回 null

Java Swing : Graphics2D rotation creating disgusting edges

java - 为什么这段代码没有退出 while 循环?绝对文件路径或名称有问题吗?

Java解压奇怪的字符(编码?)

java - 扫描器类 NoSuchElementFoundException

java - 查询行为改变对设计的影响——OOP范式

java - 从子类调用方法