读取名称为

时间:2016-07-26 09:40:44

标签: java encoding special-characters whitespace

我有一组文件作为资源附加到我的项目中。这些文件包含程序读取和处理的数据。 这就是我的方式:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();       
InputStream inputStream = classLoader.getResourceAsStream(filename);            
packageParameters = IOUtils.toString(inputStream, "UTF-8");                     
inputStream.close();    

一切都很好,直到我尝试读取具有以下特定名称的文件:

\sets\Тех. тип = 0 Сет. = 1 Комплект 1.qr

getResourceAsStream返回null,表示无法找到此资源。

所以,问题是:我如何阅读名称中包含西里尔符号,空格和特殊符号的文件? 试图编码名称 - 没有帮助。无法将其转换为URI,因为构造函数会抛出非法符号的异常。

任何想法都赞赏。 花了几天时间分析类似的答案 - 仍然不知道如何解决它。

1 个答案:

答案 0 :(得分:2)

尝试删除尾部斜杠,并将\替换为/

我将文件Тех. тип = 0 Сет. = 1 Комплект 1.qr放入src\main\resources\sets内容

123

这对我有用

import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.io.InputStream;

public class Application {
    public static void main(String[] args) throws IOException {
        String filename = "sets/Тех. тип = 0 Сет. = 1 Комплект 1.qr";
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        InputStream inputStream = classLoader.getResourceAsStream(filename);
        String packageParameters = IOUtils.toString(inputStream, "UTF-8");
        inputStream.close();
        System.out.println(packageParameters); // prints 123
    }
}

此类的来源位于src\main\java\Application.java。所有路径都与项目的根目录相关。