使用java中的getResource()读取包含路径名中空格的文件时的结果很尴尬

时间:2014-11-05 14:29:05

标签: java eclipse file getresource

我有一个名为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,它会在两种情况下都给出“不存在”。有谁能解释这些事件?

1 个答案:

答案 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();
        }
    }
}