2014-10-31 3 views
0

Я должен создать проект Java-апплета и в этом мне нужно прочитать данные из CSV-файла и поместить его в прокручиваемую таблицу. Я попытался выполнить dothat и получить исключение FileNotFoundException.java.io.FileNotFoundException при чтении CSV-файла

Вот мой код:

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

Я могу думать о двух потенциальных проблем:

  1. Апплет не может читать файлы, расположенные на веб-сервере.
  2. Если файл упакован в файл jar, для его чтения необходим специальный код. В частности, вам нужен getResourceAsStream класса ClassLoader.

Для второй, самый простой способ получить ClassLoader «s getResourceAsStream является вызов Class» s getResourceAsStream.

Я не проверял, но что-то, как это должно работать:

BufferedReader br = new BufferedReader(new InputStreamReader(Table.class.getResourceAsStream("/Products.csv"))); 

Если это не компилируется, изменить Table.class к this.getClass()

Обратите внимание, что / здесь, чтобы указать, что продукты .csv находится в корне файла .jar. В противном случае он будет использовать имя пакета в качестве каталога для поиска (т. Е. Если пакет был package this.is.my.boomstick;, он попытается открыть this/is/my/boomstick/Products.csv)

+0

Я попробовал это, и он говорит, что такого конструктора не существует BufferedReader (InputStream) –

+0

@HridayamBakshi Правильно, моя ошибка ... вам нужно сначала обернуть его в InputStreamReader ... Я исправлю свой ответ за секунду. Изменить. Должно быть исправлено. – Powerlord

+0

Теперь он выбрасывает NullPointerException –

Смежные вопросы