我有一个名为Downloader的项目,其中包含以下文件:
Downloader
-->src
-->Downloader
-->DownLoader.java
-->AudioLinks
我尝试通过以下函数从Downloader.java访问AudioLinks。
public void readFile()
{
{
File file=new File(this.getClass().getResource("AudioLinks").getFile());
if(file.exists())
{
System.out.println(file+" Exists");
}
else
{
System.out.println(file+" Doesn't exist");
}
}
}
它返回了以下内容:
E:\Project%20Eclipse\Workspace\Downloader\bin\Downloader\AudioLinks Doesn't exist
但如果我编辑这样的功能(用“”替换“%20”):
public void readFile()
{
{
File file=new File(this.getClass().getResource("AudioLinks").getFile().replaceAll("%20", " "));
if(file.exists())
{
System.out.println(file+" Exists");
}
else
{
System.out.println(file+" Doesn't exist");
}
}
}
它返回:
E:\Project Eclipse\Workspace\Downloader\bin\Downloader\AudioLinks Exists
问题是,如果我将程序导出到runnable jar,它会在两种情况下都给出“不存在”。有谁能解释这些事件?
答案 0 :(得分:1)
peeskillet在评论中写道: 不要将其作为文件阅读。通过getResource()将其作为URL读取。摆脱文件包装器(或通过getResourceAsStream的一个InputStream,具体取决于所需的类型)
所以,我已经编辑了这样的函数,没有发现任何错误:
public void readFile()
{
{
BufferedReader reader=new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("AudioLinks")));
String text;
try {
while((text=reader.readLine())!=null)
{
System.out.println(text);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}