运行环境:
bash-3.2# uname -a
AIX hostname 3 5 00C758804C00
bash-3.2#  /usr/ibm-java-ppc64-60/bin/java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build pap6460sr9fp2-20110627_03(SR9 FP2))
IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 AIX ppc64-64 jvmap6460sr9-20110624_85526 (JIT enabled, AOT enabled)
J9VM - 20110624_085526
JIT  - r9_20101028_17488ifx17
GC   - 20101027_AA)
JCL  - 20110530_01bash-3.2# echo $LANG
ZH_CN测试程序如下:import java.io.File;
public class test { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
String strDir = "/data/test";
String tmpname;
File fdir = new File(strDir);
String[] flist = fdir.list();
for(int i=0;i< flist.length; i++) {
tmpname = strDir + File.separator + flist[i];
File tmpFile = new File(tmpname);
if (tmpFile.exists()) {
System.out.println(tmpname + " is existed.");
} else {
System.out.println(tmpname + " not is existed");
} } }}如果目录中有中文文件名的话,则显示“not is existed", 修改语言环境变量为GB18030后,运行能显示”Is existed”
。问题是遇到不同字符集的中文文件名后,怎么处理呢?

解决方案 »

  1.   

    File.getName().matches("\\W+") 得到文件名用正则进行匹配
      

  2.   

    我本来是在目录A下查找文件,如果发现,到另一目录B下找到同名的文件,进行处理。实际情况是目录A下得到文件名,在目录B下查找不到(实际是有的)。
      

  3.   


    if (tmpFile.exists() && !tmpFile.getName().matches("\\W+")) {
    System.out.println(tmpname + " is existed.");
    } else {
    System.out.println(tmpname + " not is existed");
    }
    这样就可以了
      

  4.   

    再贴一次测试代码import java.io.File;
    public class test {
    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    String strDir = "/data/INPUT/jpginfo/name";
    String tmpname;
    File fdir = new File(strDir);
    String[] flist = fdir.list();
    for(int i=0;i< flist.length; i++) {
    tmpname = strDir + File.separator + flist[i];
    File tmpFile = new File(tmpname);
    if (tmpFile.exists()) {
    System.out.println(tmpname + " is existed.");
    } else {
    System.out.println(tmpname + " not is existed");
    }
    }
    }
    }
      

  5.   

    发现了可以放到ArrayList里到另一个目录里去匹配
      

  6.   


    关键发现了,还要处理,怎么打开文件,用FileInputStream打开会抛异常,找不到文件的。
      

  7.   

    怎么转呢,转成什么码呢,我认为这是Java平台的一Bug。
      

  8.   

    如果目录中有中文文件名的话,则显示“not is existed"这个可以使用正则表达式来判断,至于中文的话试试判断它的hash码同不同来解决。算法稍微复杂点的话应该可以解决,要是不想写的话直接调用试试。
      

  9.   

    java -version
    java version "1.6.0"
    Java(TM) SE Runtime Environment (build pxi3260sr9fp2-20110625_01(SR9 FP2))
    IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 Linux x86-32 jvmxi3260sr9-20110624_85526 (JIT enabled, AOT enabled)
    J9VM - 20110624_085526
    JIT  - r9_20101028_17488ifx17
    GC   - 20101027_AA)
    JCL  - 20110530_01echo $LANG
    zh_CN.UTF-8没有这种问题。
      

  10.   

    我程序运行在AIX上啊,不过谢谢了。