CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

急,请高手帮小弟解决个问题,在线等!

楼主success_dream(sharp engineer)2006-10-18 09:03:29 在 Java / J2SE / 基础类 提问

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

1 楼lianhg(lianhg)回复于 2006-10-18 09:12:31 得分 0

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]);  
   
   
  Top

2 楼success_dream(sharp engineer)回复于 2006-10-18 09:30:25 得分 0

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

3 楼lianhg(lianhg)回复于 2006-10-18 09:36:54 得分 0

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]);  
  }  
  Top

4 楼success_dream(sharp engineer)回复于 2006-10-18 09:47:17 得分 0

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排序吗??  
  Top

5 楼lianhg(lianhg)回复于 2006-10-18 10:11:47 得分 0

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]);  
  }Top

6 楼lianhg(lianhg)回复于 2006-10-18 10:17:21 得分 0

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

7 楼guaxixi627()回复于 2006-10-18 10:18:02 得分 0

/********************/  
  /*@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]);  
  }  
  }  
  Top

8 楼success_dream(sharp engineer)回复于 2006-10-18 10:19:47 得分 0

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

9 楼guaxixi627()回复于 2006-10-18 10:20:15 得分 0

/********************/  
  /*@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]);  
  }  
  }Top

10 楼lianhg(lianhg)回复于 2006-10-18 10:45:29 得分 0

因为使用了   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]);  
          }Top

11 楼success_dream(sharp engineer)回复于 2006-10-18 11:03:27 得分 0

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,我明明创建的是文件夹怎么出来是包??Top

12 楼guaxixi627()回复于 2006-10-18 12:28:08 得分 0

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

13 楼lianhg(lianhg)回复于 2006-10-18 12:29:25 得分 0

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

14 楼lianhg(lianhg)回复于 2006-10-18 12:34:48 得分 0

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]);  
   
  }  
   
  }  
   
  Top

15 楼success_dream(sharp engineer)回复于 2006-10-18 12:38:32 得分 0

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

16 楼success_dream(sharp engineer)回复于 2006-10-18 12:54:20 得分 0

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)Top

17 楼lianhg(lianhg)回复于 2006-10-18 13:02:20 得分 0

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   的绝对路径Top

18 楼success_dream(sharp engineer)回复于 2006-10-18 14:27:31 得分 0

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

19 楼lianhg(lianhg)回复于 2006-10-18 14:32:04 得分 0

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

20 楼success_dream(sharp engineer)回复于 2006-10-18 14:40:40 得分 0

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

21 楼success_dream(sharp engineer)回复于 2006-10-18 14:44:16 得分 0

是   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)  
  Top

22 楼lianhg(lianhg)回复于 2006-10-18 15:18:36 得分 0

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

23 楼lianhg(lianhg)回复于 2006-10-18 15:27:18 得分 0

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

24 楼success_dream(sharp engineer)回复于 2006-10-18 15:42:03 得分 0

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页面呢?Top

25 楼lianhg(lianhg)回复于 2006-10-18 15:50:11 得分 0

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

26 楼success_dream(sharp engineer)回复于 2006-10-18 16:28:38 得分 0

 
  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\\");直接就得到了绝对路径.  
  是不是这样的呢?谢谢!Top

27 楼lianhg(lianhg)回复于 2006-10-18 16:43:56 得分 0

是的都可以Top

28 楼success_dream(sharp engineer)回复于 2006-10-19 15:45:06 得分 0

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]);  
  }  
  这两个有啥区别啊??Top

29 楼lianhg(lianhg)回复于 2006-10-19 15:50:18 得分 0

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

30 楼success_dream(sharp engineer)回复于 2006-10-19 16:30:02 得分 0

总觉得不加{}的习惯不好啊!还有你看我写的代码,不知道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());  
        }  
  }); Top

31 楼lianhg(lianhg)回复于 2006-10-19 16:37:14 得分 0

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]);  
  }  
  }  
  }Top

32 楼success_dream(sharp engineer)回复于 2006-10-19 17:27:05 得分 0

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

33 楼lianhg(lianhg)回复于 2006-10-20 08:39:34 得分 0

是   1.5   泛型Top

34 楼hdhmail2000(禅剑飞雪)回复于 2006-10-20 10:43:30 得分 0

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

35 楼hdhmail2000(禅剑飞雪)回复于 2006-10-20 10:59:18 得分 0

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());  
          }  
   
           
   
   
  }  
   
  }  
  Top

36 楼hdhmail2000(禅剑飞雪)回复于 2006-10-20 11:00:18 得分 0

支持中文排序的!Top

相关问题

关键词

得分解答快速导航

  • 帖主:success_dream

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo