我文件夹Data下有A2,Z3,WW,O3...等文件夹,我要求把Data下的文件夹按英文字母从A到Z排序,输出的结果如下:A2,
O3,
WW,
Z3
...
请问高手这个功能该如何实现?小弟在线等!谢谢!

解决方案 »

  1.   

    File d = new File("你的文件夹路径");
    String[] fileNames = d.list();// 自己写个内部类,然后重写 compare, :
    class MyComparator implements Comparator {
         public int compare(Object obj1, Object obj2) {Collections.sort(fileNames , new MyComparator()); for (int i=0; i < fileNames.length ; i++) {  
    File read = new File(fileNames[i]);
      

  2.   

    to lianhg(lianhg):
    你程序是不是没写完啊?Object obj1和Object obj2要进行比较吧?File read ,这个read对象要进行什么操作呢??能不能写清楚呢,谢谢拉!
      

  3.   

    File d = new File("你的文件夹路径");
    String[] fileNames = d.list();// 自己写个内部类,然后重写 compare, :
    class MyComparator implements Comparator {
         public int compare(Object obj1, Object obj2) {
             String name1 = (String) obj1;
             String name2 = (String) obj2;
             int i = 0;
             i = name1.compareTo(name2);
             return i;
         }
    }
    Collections.sort(fileNames , new MyComparator()); for (int i=0; i < fileNames.length ; i++) {  
            System.out.println(fileNames[i]);
    }
      

  4.   

    lianhg(lianhg) 大哥:
    Collections.sort(fileNames , new MyComparator());不能这样写吧,我做的测试程序是报错的啊!!!你可以试试!
    package com.manual;
    import java.io.*;
    import java.util.*;
    //自己写个内部类,然后重写 compare, :
    class MyComparator implements Comparator {
        public int compare(Object obj1, Object obj2) {
            String name1 = (String) obj1;
            String name2 = (String) obj2;
            int i = 0;
            i = name1.compareTo(name2);
            return i;
        }
    }
    public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    File d = new File("Data/");
    String[] fileNames = d.list();

    Collections.sort(fileNames , new MyComparator());
    //Arrays.sort(fileNames , new MyComparator());  for (int i=0; i < fileNames.length ; i++) {  
            System.out.println(fileNames[i]);
    }
    }}
    下面这行报错的!
    Collections.sort(fileNames , new MyComparator());
    还有你的compare方法就能将字母从A---Z排序吗??
      

  5.   

    File d = new File("D:\\temp\\A");
    String[] fileNames = d.list();
    Arrays.sort(fileNames);
    for (int i=0; i < fileNames.length ; i++) {  
            System.out.println(fileNames[i]);
    }
      

  6.   

    你注释的代码 //Arrays.sort(fileNames  就是正确的。
      

  7.   

    /********************/
    /*@author guaxixi627*/
    /********************/
    import java.io.*;
    import java.util.*;
    class FileTest
    {
    public static void main(String[] args) 
    { File f=new File(filepath);
        String names[]=f.list();
        Arrays.sort(names,new Comparator()//利用内部类进行排序
        {
         public int compare(Object o1,Object o2)
         {
         String s1 = (String)o1;
         String s2 = (String)o2;
         return s1.toLowerCase().compareTo(s2.toLowerCase());
         }
        });
    for(int i=0;i<names.length;i++)
    System.out.println(names[i]);
    }
    }
      

  8.   

    to lianhg(lianhg) :
    你上面怎么没用new MyComparator()???要不然你怎样从A到Z排序啊????
    应该是这样吧:Arrays.sort(fileNames,new MyComparator());可是我这样写还是报错的!你最好测一下程序,好吗?谢谢拉!
      

  9.   

    /********************/
    /*@author guaxixi627*/
    /********************/import java.io.*;
    import java.util.*;
    class FileTest
    {
    public static void main(String[] args) 
    {  File f=new File("filepath");
     String names[]=f.list();
              Arrays.sort(names,new Comparator()//利用内部类进行排序
        {
         public int compare(Object o1,Object o2)
         {
    String s1 = (String)o1;
    String s2 = (String)o2;
    return s1.toLowerCase().compareTo  (s2.toLowerCase());
         }
        });
    for(int i=0;i<names.length;i++)
    System.out.println(names[i]);
    }
    }
      

  10.   

    因为使用了 jdk1.5 缘故,1.4 不出错。以下是对应 1.5 的代码
    File d = new File("D:\\temp\\A");
         String[] fileNames = d.list();
         Arrays.sort(fileNames, new Comparator<String>() {
    public int compare(String str1, String str2) {
                 int i = 0;
        i = str1.compareTo(str2);
        return i;
        }
    }
          );
    for (int i=0; i < fileNames.length ; i++) {  
            System.out.println(fileNames[i]);
        }
      

  11.   

    to lianhg(lianhg),guaxixi627() :
    我对相对路径的问题一直很疑惑!
    1)eclipse中的相对路径应该和.class文件一个级别吧还是和.java文件一个级别?假如我这一行File f=new File("filepath");的filepath想换成Data\,
    File f = new File("Data\");我这个Data目录应该放在我源文件的包com.manual下和我这个程序同一级还是应该放在我编译后的这个程序.class文件的同一级??以前我问其它人都说放.class一级,可是我试验放源文件一级是正确的?到底是怎么回事??
    2)我在com.manual包下创建一个文件夹Data,为什么创建好的文件夹图标是包的图标,不是文件夹图标呢???而且创建的文件夹的名字怎么不叫Data,eclipse里怎么叫com.manual.Data,我明明创建的是文件夹怎么出来是包??
      

  12.   

    File f = new File("Data\\") 这句中  Data文件夹的路径为:  盘符名:/项目名/Data ,如果你想要对某个包下面的文件排序,就应该改成File f = new File("com\\manual\\Data")
    不知道我这样回答是否解决了你所要问的。
      

  13.   

    1) String path = System.getProperty("user.dir");
       System.out.println("path :" +path);   // 当前 class 的绝对路径2)包的路径就是文件夹
      

  14.   

    to lianhg(lianhg) :
    你上面怎么没用new MyComparator()???要不然你怎样从A到Z排序啊????
    应该是这样吧:Arrays.sort(fileNames,new MyComparator());可是我这样写还是报错的!你最好测一下程序,好吗?谢谢拉// 报错原因如下,你没有初始化 Test import java.io.*;
    import java.util.*;
    class FileTest
    {
    public static void main(String[] args) 
    {
         Test t = new Test();
         t.f();
    } void f() {
        File f=new File(filepath);
        String names[]=f.list();
        Arrays.sort(names,new Comparator()//利用内部类进行排序
        {
        public int compare(Object o1,Object o2)
        {
        String s1 = (String)o1;
        String s2 = (String)o2;
        return s1.toLowerCase().compareTo(s2.toLowerCase());
        }
        });
    for(int i=0;i<names.length;i++)
    System.out.println(names[i]);}}
      

  15.   

    to guaxixi627(),lianhg(lianhg) :
    我的意思是说用相对路径!这句话File f = new File("Data\\");这个Data目录我应该放在项目中的什么位置??是相对与谁的目录???
      

  16.   

    to guaxixi627() :
    我按照你的说法根本不行的!
    我是在我com.manual包下建立了Data文件夹,然后把程序改为:
    package com.manual;import java.io.*;
    import java.util.*;
    class NewTest
    {
    public static void main(String[] args) 
    { File f=new File("com\\manual\\Data");
        String names[]=f.list();
    //  利用内部类进行排序
        Arrays.sort(names,new Comparator(){
    public int compare(Object o1,Object o2)
    {
         String s1 = (String)o1;
         String s2 = (String)o2;
         return s1.toLowerCase().compareTo(s2.toLowerCase());
       }
    });
    for(int i=0;i<names.length;i++)
    System.out.println(names[i]);
    }
    }程序报错:
    Exception in thread "main" java.lang.NullPointerException
    at java.util.Arrays.sort(Unknown Source)
    at com.manual.NewTest.main(NewTest.java:15)
      

  17.   

    to guaxixi627(),lianhg(lianhg) :
    我的意思是说用相对路径!这句话File f = new File("Data\\");这个Data目录我应该放在项目中的什么位置??是相对与谁的目录???Data目录放到项目中的任意位置都可以。根据下面获得的路径,来确定 Data目录 的位置1) String path = System.getProperty("user.dir");
       System.out.println("path :" +path);   // 当前 class 的绝对路径
      

  18.   

    lianhg(lianhg) :
    String path = System.getProperty("user.dir");这里的user.dir是指哪个目录呢?
    我在com.manual包下建立Data文件夹,这个Data目录的相对路径该怎样写???
      

  19.   

    lianhg(lianhg) :
    String path = System.getProperty("user.dir");这里的user.dir是指哪个目录呢?-- 这是取得绝对路径。然后,截取字符串取得项目的路径。“项目的路径”\DATA
       就是你需要的路径。
     
    把下面的代码添加到你的程序中, 你就明白啦
    String path = System.getProperty("user.dir");
       System.out.println("path :" +path);
      

  20.   

    lianhg(lianhg):我把你说的那两行加里面了,输出如下:
    path :E:\eclipse\eclipse\workspace\ManualBrowser
    ManualBrowser是我eclipse建立的工程名啊!我Data目录在我ManualBrowser\j2src\com.manual包下面啊!我这句话要改成:File f = new File(path+"\j2src\com.manual");是这样吗?
    你这样是取绝对路径啊!!可以不可以直接用相对路径表示???
      

  21.   

    是 File f=new File(path+"j2src\\com\\manual\\Data");吗?\
    我这样写程序报错啊!
    path :E:\eclipse\eclipse\workspace\ManualBrowser
    Exception in thread "main" java.lang.NullPointerException
    at java.util.Arrays.sort(Unknown Source)
    at com.manual.NewTest.main(NewTest.java:17)
      

  22.   

    File f=new File(path+"j2src\\com\\manual\\Data");
    --> File f=new File(path+"\j2src\\com\\manual\\Data");
      

  23.   

    不过,建议你 DATA 目录 应放到 ManualBrowser 下,不要和代码放置到一起。否则,打包时,易发生路径不正确。应放到 ManualBrowser 下,就是 path + "/DATA",简单明了/
      

  24.   

    lianhg(lianhg):
    我把这段代码用在jsp页面中
    为什么程序输出:path :C:\Program Files\Apache Software Foundation\Tomcat 5.0\bin
    怎么会是Tomcat的路径?
    String path = System.getProperty("user.dir");
       System.out.println("path :" +path);
    是不是只能用于java应用程序中,不能用于jsp页面呢?
      

  25.   

    jsp页面中取得项目的路径的方法是 request.getContextPath()
      

  26.   


    lianhg(lianhg):
    request.getContextPath()是取的WEB项目的路径,如果我Data在WEB项目下,路径就应该是"
    request.getContextPath()+"/Data"对吧,我做的测试request.getContextPath()结果是/Browser,这是个相对路径,对吧?
    application.getRealPath("Data\\");我测试出来是绝对路径E:\eclipse\eclipse\workspace\ManualBrowser\Browser\Data,也就是说这两种方法都可以用!
    如果用request.getContextPath()的话,路径要写为request.getContextPath()+"/Data";
    如果用application.getRealPath("Data\\");直接就得到了绝对路径.
    是不是这样的呢?谢谢!
      

  27.   

    lianhg(lianhg):
    程序中
    for(int i=0;i<names.length;i++)
    System.out.println(names[i]);
    为什么for()后不加{}呢??
    for(int i=0;i<names.length;i++){
    System.out.println(names[i]);
    }
    这两个有啥区别啊??
      

  28.   

    没有区别。
    for(int i=0;i<names.length;i++) 如果循环中只有一条语句,就可以不用加 {},默认执行
    这个语句。
      

  29.   

    总觉得不加{}的习惯不好啊!还有你看我写的代码,不知道eclipse为什么有黄色的感叹号!
    package com.manual;import java.io.*;
    import java.util.*;
    class NewTest
    {
    public static void main(String[] args) 
    { //File f=new File("com\\manual\\Data");
    String path = System.getProperty("user.dir");
       System.out.println("path :" +path);
       File f=new File(path+"\\j2src\\com\\manual\\Data");    String names[]=f.list();
    //  利用内部类进行排序
        Arrays.sort(names,new Comparator(){
    public int compare(Object o1,Object o2)
    {
         String s1 = (String)o1;
         String s2 = (String)o2;
         return s1.toLowerCase().compareTo(s2.toLowerCase());
       }
    });
    for(int i=0;i<names.length;i++){
    System.out.println(names[i]);
    }
    }
    }
    这段程序是黄色感叹!说Type safty:expressiong of type new Comparator() need unchecked
    conversion to confirm to Comparator<? super T>
     Arrays.sort(names,new Comparator(){
    public int compare(Object o1,Object o2)
    {
         String s1 = (String)o1;
         String s2 = (String)o2;
         return s1.toLowerCase().compareTo(s2.toLowerCase());
       }
    });
      

  30.   

    import java.io.*;
    import java.util.*;class NewTest {
    public static void main(String[] args) { // File f=new File("com\\manual\\Data");
    String path = System.getProperty("user.dir");
    System.out.println("path :" + path);
    File f = new File(path + "\\j2src\\com\\manual\\Data"); String names[] = f.list();
    // 利用内部类进行排序
    Arrays.sort(names, new Comparator<String>() {
    public int compare(String o1, String o2) {
    //String s1 = (String) o1;
    //String s2 = (String) o2;
    return o1.toLowerCase().compareTo(o2.toLowerCase());
    }
    });
    for (int i = 0; i < names.length; i++) {
    System.out.println(names[i]);
    }
    }
    }
      

  31.   

    new Comparator<String>后面为什么要加<String>???JDK1.5必须这样吗??
      

  32.   

    用treemap吧,自动给你排号序了,不用那么麻烦
      

  33.   

    import java.io.File;
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.TreeMap;public class TestOrder { /**
     * @param args
     */
    public static void main(String[] args) 
    {
    String path = System.getProperty("user.dir");
    System.out.println("path :" + path);
    File f = new File(path); String names[] = f.list();
    TreeMap  tm=new TreeMap();
    for (int i = 0; i < names.length; i++) 
    {
    //System.out.println(names[i]);
    tm.put(names[i],names[i]);
    }

    Collection col = tm.keySet();
        Iterator it = col.iterator();
        while(it.hasNext()) 
        {
            System.out.println(it.next());
        }     
    }}