使用Java中的File Chooser从任何位置选择txt文件

时间:2011-06-21 13:06:26

标签: java file

我已使用Sun File Chooser Demo从我的桌面或任何位置选择文件。

我在打开的文件操作中添加了以下代码:

if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = fc.getSelectedFile();
                log.append("Opening: " + file.getName() + "." + newline);
                ReadData rd = new ReadData();  //added by me
                rd.readData(file.getName());   //added by me
            } else {
                log.append("Open command cancelled by user." + newline);

ReadData类包含readData方法,该方法将采用文件名,而BufferedReader将逐行读取文件内容。

但是在选择带文件选择器的文件后,它无法从我的桌面打开文件。如果我将文件放在项目文件夹中,它就可以打开文件而无需更改任何代码。 我需要对代码进行哪些修改才能从任何位置选择和打开文件? 谢谢

4 个答案:

答案 0 :(得分:4)

您只将文件的名称(而不是完整路径)传递给ReadData课程。所以,你的ReadData类不会知道文件在哪个目录中 - 它会尝试在当前目录中找到它(无论目前是什么)。

不是只传递文件名,而是传递整个路径:

rd.readData(file.getPath());

更好的是,更改您的ReadData.readData()方法,使其成为File而不是String,并将您从文件中返回的File对象传递给它选择器:

rd.readData(file);

答案 1 :(得分:1)

getName()仅获取文件的最后一段而没有任何路径信息。如果Java应用程序的工作目录不是包含该文件的确切目录,那将无效。

为什么你的ReadData不接受档案? Java内置的所有文件输入机制都将接受File(例如FileInputStreamFileReader)。否则请使用getPath()

答案 2 :(得分:1)

您只是将文件名传递给readData()方法。

因此,如果您的文件存储在C:\ Users \ JavaBits \ Project \ Java \ file.txt中,则readData()方法仅获取file.txt,因此无法找到该文件。你应该这样做:

rd.readData(file);

这将包含相对路径。

答案 3 :(得分:1)

使用文件对象打开输入流,而不是使用其名称。如:

BufferedReader br = new BufferedReader(new FileInputStream(file));

修改你的方法readData以接受File对象而不是String,并使用这个对象打开BufferedReader。