使用getClass()。getResource将.txt文件检索到JTextArea

时间:2016-04-07 11:43:22

标签: java file user-interface jar

我目前正在开展一个项目,该项目显示学生可以注册的课程的JList。

单击列表项时,会将变量传递给setTextArea()方法以获取txt文件名。

例如,如果我单击Computer Science,会传递一个courseName变量并将其插入到URL中以检索txt文件。

enter image description here

这完全没问题。除非我使用JAR文件。我知道.getClass()和getResource()必须用于在使用JAR时访问资源,但我似乎无法让我的工作。

以下是原始代码

public void valueChanged(ListSelectionEvent e)
{
    int selectionNum = courseList.getSelectedIndex();
    String courseName;

    //Switch statement to pass strings to method
    switch(selectionNum)
    {
        case 0: courseName = "computer_science";
                setTextArea(courseName);
                currentCourseClicked ="0";
                break;

        case 1: courseName = "business";
                setTextArea(courseName);
                currentCourseClicked ="1";
                break;

        case 2: courseName = "business2";
                setTextArea(courseName);
                currentCourseClicked ="2";
                break;

        case 3: courseName = "engineering";
                setTextArea(courseName);
                currentCourseClicked ="3";
                break;

        case 4: courseName = "sport";
                setTextArea(courseName);
                currentCourseClicked ="4";
                break;

        case 5: courseName = "early";
                setTextArea(courseName);
                currentCourseClicked ="5";
                break;  

        case 6: courseName = "social";
                setTextArea(courseName);
                currentCourseClicked ="6";
                break;              
    }

}   //End of valuesChanges Method



/**
 * This method is used to read the file, with the course name passed
 * from the valueChanged method.
 * @param courseName
 */
@SuppressWarnings("resource")
public void setTextArea(String courseName)
{   
    descriptionPanel.setVisible(true);
    enrol.setVisible(true);
    enrol.setFont(new Font("", Font.BOLD, 20));

    try
    {
        //This retrieves the information from a text file
        FileReader file = new FileReader("./res/courseInfo/" +courseName + ".txt");
        Scanner fileReaderScan = new Scanner(file);

        String storeAll = "";

        //while loop to read trough lines of the text file
        while(fileReaderScan.hasNextLine())
        {   
            String temp = fileReaderScan.nextLine() + "\n";
            storeAll += temp;
        }
        descriptionTextArea.setText(storeAll);
    }
    catch (FileNotFoundException e1)
    {
        e1.printStackTrace();
    }
} //end of setTextArea method

然后我尝试使用getClass和getResource,但它无法使用网址并要求我将URL类型更改为String。如果我这样做,那么getClass和getResource将不起作用。

enter image description here

我后来尝试使用String urlString = url + "";将url连接到字符串,但这也无效。

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:2)

我猜你FileReader在JAR文件中不起作用,因为它试图在当前工作目录中获取文件,而不是在JAR文件中。

您必须使用以下行:

FileReader f = new FileReader(new File(ClassA.class.getResource("/res/courseInfo/" +courseName + ".txt").toURI()));

我认为这应该可以解决您的问题。

<小时/> 由于您正在使用Scanner我建议您完全删除FileReader,而是使用此行初始化您的Scanner对象:

Scanner fileReaderScan = new Scanner(getClass().getResourceAsStream("/res/courseInfo/" +courseName + ".txt"));