我已使用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将逐行读取文件内容。
但是在选择带文件选择器的文件后,它无法从我的桌面打开文件。如果我将文件放在项目文件夹中,它就可以打开文件而无需更改任何代码。 我需要对代码进行哪些修改才能从任何位置选择和打开文件? 谢谢
答案 0 :(得分:4)
您只将文件的名称(而不是完整路径)传递给ReadData
课程。所以,你的ReadData
类不会知道文件在哪个目录中 - 它会尝试在当前目录中找到它(无论目前是什么)。
不是只传递文件名,而是传递整个路径:
rd.readData(file.getPath());
更好的是,更改您的ReadData.readData()
方法,使其成为File
而不是String
,并将您从文件中返回的File
对象传递给它选择器:
rd.readData(file);
答案 1 :(得分:1)
getName()
仅获取文件的最后一段而没有任何路径信息。如果Java应用程序的工作目录不是包含该文件的确切目录,那将无效。
为什么你的ReadData
不接受档案? Java内置的所有文件输入机制都将接受File
(例如FileInputStream
,FileReader
)。否则请使用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。