急,请高手帮小弟解决个问题,在线等!
我文件夹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




