首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:在URI中处理特殊字符

Java:在URI中处理特殊字符
EN

Stack Overflow用户
提问于 2016-10-27 09:38:13
回答 1查看 1.5K关注 0票数 0

我正在尝试从URI访问一个文件,不幸的是,该文件路径包含特殊名称。

例如: file://C:/6-6+hf.1-181/db/mssql-ddl.sql

详细地说,下面是我的代码(scriptFile高于值):

代码语言:javascript
复制
File tempFile = FileUtility.fileFromUri(new URI(scriptFile));

哪个fileFromUri函数是?

代码语言:javascript
复制
public static File fileFromUri(URI uri) {
    try {
        if(uri.getScheme() == null) {
            uri = (new File(uri.getPath())).toURI();
        } else if(!uri.getScheme().equals("file")) {
            return null;
        }

        String fileName = uri.toURL().getFile();
        return new File(URLDecoder.decode(fileName, "UTF8"));
    } catch (Exception var2) {
        return null;
    }
}

我有这样的例外

C:/6-6+hf.1-181/db/mssql-ddl.sql (系统找不到指定的路径)在java.io.FileInputStream.open(FileInputStream.java:195) ~?:1.8.0_65 at java.io.FileInputStream.(FileInputStream.java:138) ~?:1.8.0_65 at java.io.FileReader的java.io.FileInputStream.open0(原生方法) ~?:1.8.0_65上.(FileReader.java:72) ~?:1.8.0_65 at ~?:1.8.0_65~公共工具开发-SNAPSHOT.jar:?在com.automic.actions.database.utils.SQLRunner.readStatementsFromFile(SQLRunner.java:117) ~课程/:?在com.automic.actions.database.utils.SQLRunner.executeScript(SQLRunner.java:91)课程/:?在com.automic.actions.database.SQLFeature.run(SQLFeature.java:302)课程/:?在com.automic.actions.common.FeatureRunner.run(FeatureRunner.java:24)公共工具开发-SNAPSHOT.jar:?在com.automic.actions.runner.DatabaseToolFileCmd.main(DatabaseToolFileCmd.java:25)课程/:?

我知道这个异常是因为我以前使用过URLDecoder,在解码之后,Java将'+‘字符翻译成空格字符。解决方案可能只是将'+‘字符替换为其他字符,然后再替换它。但是,我不想使用这种方法。

所以你能帮我解决这个问题吗?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-27 10:06:00

当您通过URI传递路径时,您应该首先对它进行编码,如果您使用ajax,也许encodeURIComponent()方法是正确的。就像这样:

代码语言:javascript
复制
encodeURIComponent("file://C:/6-6+hf.1-181/db/mssql-ddl.sql")
//output
"file%3A%2F%2FC%3A%2F6-6%2Bhf.1-181%2Fdb%2Fmssql-ddl.sql"

如果您使用java,URLEncode.encode(String str, String env)方法是正确的。

代码语言:javascript
复制
    String path = "file://C:/6-6+hf.1-181/db/mssql-ddl.sql";
    String path1 = URLEncoder.encode(path,"UTF-8");
    System.out.println(path1);
    String path2 = URLDecoder.decode(path1,"UTF-8");
    System.out.println(path2);

    //output
    file%3A%2F%2FC%3A%2F6-6%2Bhf.1-181%2Fdb%2Fmssql-ddl.sql
    file://C:/6-6+hf.1-181/db/mssql-ddl.sql
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40281164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档