You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Geoff Watters <ge...@oracle.com> on 2015/03/16 12:07:33 UTC

[vfs] vsf2.2.0: non-ascii chars in file name are not handled by createFolder()

All

I am using*commons-vfs2-2.0.jar* and am running into problems when file 
names contain non-ascii characters. According to 
https://issues.apache.org/jira/browse/VFS-305 this has been 
fixed/shipped in 2.0. In my environment I am able to create such file 
names when using ftp on the command-line (Red Hat Enterprise Linux 
Server release 5.8 (Tikanga)).

When I execute the following sample code, I get the output shown below.

public class FtpTest {
     public static void main(String[] args) throws FileSystemException
     {
         String host="hhh";
         String user = "uuu";
         String password = "ppp";
         String destDir = "/tmp";
         FileSystemOptions opts = new FileSystemOptions();
FtpFileSystemConfigBuilder.getInstance().setControlEncoding(opts, "UTF-8");

         DefaultFileSystemManager manager = new DefaultFileSystemManager();
         manager.addProvider("ftp", new FtpFileProvider());
         manager.init();

         String root="ftp://"+user+":"+password+"@"+host+destDir;
         // Specify a number of directories that should be created under 
destDir
         String[] lRoots = new String[4];
         lRoots[0]= root+"/ftpDebug";
         lRoots[1]= root+"/ftp\u7684Debug";  // insert a non-ascii char
         lRoots[2]= root+"/ftp\u7685Debug";  // insert a different 
non-ascii char
         lRoots[3]= root+"/ftp\u7684Debug";  // insert the same 
non-ascii char

         // Verify the ControlEncoding
         System.out.println("ControlEncoding is 
"+FtpFileSystemConfigBuilder.getInstance().getControlEncoding(opts));

         int dirCount=0;
         for (String lRoot: lRoots) {
             System.out.println(dirCount+") Process directory ["+lRoot+"]");
             FileObject newDir = manager.resolveFile(lRoot, opts);
             if (!newDir.exists()) {
                 try {
                     System.out.println(dirCount+") "+lRoot+" ::Dir Does 
Not Exist so Create It ");
                     newDir.createFolder();
                     if (newDir.exists())
                         System.out.println(dirCount+") "+lRoot+" 
::Creation Successful ");
                     else
                         System.out.println(dirCount+") "+lRoot+" 
::Creation Fails ");
                 }
                 catch (Exception ex) {
                     System.out.println(dirCount+") "+lRoot + " raised 
"+ex);
                 }
             }
             else
                 System.out.println(dirCount+") "+lRoot+" ::Dir Already 
Exists ");
             dirCount++;
         }
     }
}

The output from running the above is:-

ControlEncoding is UTF-8
0) Process directory [ftp://uuu:ppp@hhh/tmp/ftpDebug]
0) ftp://uuu:ppp@hhh/tmp/ftpDebug ::Dir Does Not Exist so Create It
0) ftp://uuu:ppp@hhh/tmp/ftpDebug ::Creation Successful
1) Process directory [ftp://uuu:ppp@hhh/tmp/ftpªDebug]
1) ftp://uuu:ppp@hhh/tmp/ftpªDebug ::Dir Does Not Exist so Create It
1) ftp://uuu:ppp@hhh/tmp/ftpªDebug ::Creation Successful
2) Process directory [ftp://uuu:ppp@hhh/tmp/ftp%Gçš…%@Debug]
2) ftp://uuu:ppp@hhh/tmp/ftp%Gçš…%@Debug ::Dir Does Not Exist so Create It
2) ftp://uuu:ppp@hhh/tmp/ftp%Gçš…%@Debug raised 
org.apache.commons.vfs2.FileSystemException: Could not create folder 
"ftp://uuu:***@hhh/tmp/ftp%Gçš…%@Debug".
3) Process directory [ftp://uuu:ppp@hhh/tmp/ftpªDebug]
3) ftp://uuu:ppp@hhh/tmp/ftpªDebug ::Dir Does Not Exist so Create It
3) ftp://uuu:ppp@hhh/tmp/ftpªDebug raised 
org.apache.commons.vfs2.FileSystemException: Could not create folder 
"ftp://uuu:***@hhh/tmp/ftpªDebug".

After step 1) I see a directory called*/tmp/ftp?Debug*.
I think this is causing the subsequent creation problem in step 2) and 
step 3).
When a directory such as "*ftp\u7684Debug*" does exist, then *exists*() 
returns the correct result of true, but *createFolder*() creates a 
directory with name "*ftp?Debug*".

Thanks in advance
Geoff



Resend: [vfs] vsf2.2.0: non-ascii chars in file name are not handled by createFolder()

Posted by Geoff Watters <ge...@oracle.com>.
Is anyone else able to use non-ascii chars in filenames when using VFS 
2.2.0?

As indicated below, the created file has a ? in the resultant name 
rather than the original non-ascii character.

Thanks


On 16/03/2015 11:07, Geoff Watters wrote:
> All
>
> I am using*commons-vfs2-2.0.jar* and am running into problems when 
> file names contain non-ascii characters. According to 
> https://issues.apache.org/jira/browse/VFS-305 this has been 
> fixed/shipped in 2.0. In my environment I am able to create such file 
> names when using ftp on the command-line (Red Hat Enterprise Linux 
> Server release 5.8 (Tikanga)).
>
> When I execute the following sample code, I get the output shown below.
>
> public class FtpTest {
>     public static void main(String[] args) throws FileSystemException
>     {
>         String host="hhh";
>         String user = "uuu";
>         String password = "ppp";
>         String destDir = "/tmp";
>         FileSystemOptions opts = new FileSystemOptions();
> FtpFileSystemConfigBuilder.getInstance().setControlEncoding(opts, 
> "UTF-8");
>
>         DefaultFileSystemManager manager = new 
> DefaultFileSystemManager();
>         manager.addProvider("ftp", new FtpFileProvider());
>         manager.init();
>
>         String root="ftp://"+user+":"+password+"@"+host+destDir;
>         // Specify a number of directories that should be created 
> under destDir
>         String[] lRoots = new String[4];
>         lRoots[0]= root+"/ftpDebug";
>         lRoots[1]= root+"/ftp\u7684Debug";  // insert a non-ascii char
>         lRoots[2]= root+"/ftp\u7685Debug";  // insert a different 
> non-ascii char
>         lRoots[3]= root+"/ftp\u7684Debug";  // insert the same 
> non-ascii char
>
>         // Verify the ControlEncoding
>         System.out.println("ControlEncoding is 
> "+FtpFileSystemConfigBuilder.getInstance().getControlEncoding(opts));
>
>         int dirCount=0;
>         for (String lRoot: lRoots) {
>             System.out.println(dirCount+") Process directory 
> ["+lRoot+"]");
>             FileObject newDir = manager.resolveFile(lRoot, opts);
>             if (!newDir.exists()) {
>                 try {
>                     System.out.println(dirCount+") "+lRoot+" ::Dir 
> Does Not Exist so Create It ");
>                     newDir.createFolder();
>                     if (newDir.exists())
>                         System.out.println(dirCount+") "+lRoot+" 
> ::Creation Successful ");
>                     else
>                         System.out.println(dirCount+") "+lRoot+" 
> ::Creation Fails ");
>                 }
>                 catch (Exception ex) {
>                     System.out.println(dirCount+") "+lRoot + " raised 
> "+ex);
>                 }
>             }
>             else
>                 System.out.println(dirCount+") "+lRoot+" ::Dir Already 
> Exists ");
>             dirCount++;
>         }
>     }
> }
>
> The output from running the above is:-
>
> ControlEncoding is UTF-8
> 0) Process directory [ftp://uuu:ppp@hhh/tmp/ftpDebug]
> 0) ftp://uuu:ppp@hhh/tmp/ftpDebug ::Dir Does Not Exist so Create It
> 0) ftp://uuu:ppp@hhh/tmp/ftpDebug ::Creation Successful
> 1) Process directory [ftp://uuu:ppp@hhh/tmp/ftpªDebug]
> 1) ftp://uuu:ppp@hhh/tmp/ftpªDebug ::Dir Does Not Exist so Create It
> 1) ftp://uuu:ppp@hhh/tmp/ftpªDebug ::Creation Successful
> 2) Process directory [ftp://uuu:ppp@hhh/tmp/ftp%Gçš…%@Debug]
> 2) ftp://uuu:ppp@hhh/tmp/ftp%Gçš…%@Debug ::Dir Does Not Exist so 
> Create It
> 2) ftp://uuu:ppp@hhh/tmp/ftp%Gçš…%@Debug raised 
> org.apache.commons.vfs2.FileSystemException: Could not create 
> folder "ftp://uuu:***@hhh/tmp/ftp%Gçš…%@Debug".
> 3) Process directory [ftp://uuu:ppp@hhh/tmp/ftpªDebug]
> 3) ftp://uuu:ppp@hhh/tmp/ftpªDebug ::Dir Does Not Exist so Create It
> 3) ftp://uuu:ppp@hhh/tmp/ftpªDebug raised 
> org.apache.commons.vfs2.FileSystemException: Could not create folder 
> "ftp://uuu:***@hhh/tmp/ftpªDebug".
>
> After step 1) I see a directory called*/tmp/ftp?Debug*.
> I think this is causing the subsequent creation problem in step 2) and 
> step 3).
> When a directory such as "*ftp\u7684Debug*" does exist, then 
> *exists*() returns the correct result of true, but *createFolder*() 
> creates a directory with name "*ftp?Debug*".
>
> Thanks in advance
> Geoff
>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org