使用apache commons-vfs 操作ftp时遇到中文路径的问题

kunbu 发布于 2016/09/21 15:34
阅读 1K+
收藏 0

之前我用Apache commons-vfs工具进行ftp操作(FTP服务器是 FileZilla Server),大部分情况都还挺正常。但是昨天突然出现一个很诡异的问题。

当我的文件路径出现某些的中文时,程序在访问这个路径就会找不到这些路径。

测试代码如下:

@Test
    public void test() throws org.apache.commons.vfs2.FileSystemException, UnsupportedEncodingException {
        FtpFileSystemConfigBuilder builder = FtpFileSystemConfigBuilder.getInstance();
        FileSystemOptions options = new FileSystemOptions();
        builder.setControlEncoding(options,"UTF-8");
        builder.setServerLanguageCode(options,"zh");
        FileSystemManager manager = VFS.getManager();

        String path1 = "ftp://test:test@localhost:21/foo/硅/test1";
        String path2 = "ftp://test:test@localhost:21/foo/硅/test2";
        FileObject fo1 = manager.resolveFile(new String(path1.getBytes("UTF-8"),"ISO-8859-1"));
        FileObject fo2 = manager.resolveFile(new String(path2.getBytes("UTF-8"),"ISO-8859-1"));

        fo1.createFolder();
        fo2.createFolder();

        fo1.close();
        fo2.close();
    }

上面这段程序创建两个文件夹,第一个可以成功,第二个就失败了,程序报的错误是:

org.apache.commons.vfs2.FileSystemException: Could not create folder "ftp://test:***@localhost/foo/硅".

据我分析,在创建第二个文件夹的时候,程序认为下面这个路径不存在,然后去创建他,但是创建时候ftp又提示文件夹已存在,然后就创建失败了

ftp://test:test@localhost:21/foo/硅
但是,如果我把路径改成下面这样,程序又能执行成功
String path1 = "ftp://test:test@localhost:21/foo/测试/test1";
String path2 = "ftp://test:test@localhost:21/foo/测试/test2";



运行结果如下图:

太莫名其妙了,希望大神们能够指点迷津,不胜感激涕零。
加载中
返回顶部
顶部