E:\Study\Practise\com文件夹存放的即bruceeckel自定义的类,我把要测试的DirList.java文件放E:\Study\Practise\com\bruceeckel\util下,编译结果如下:E:\Study\Practise\com\bruceeckel\util>javac DirList.java
DirList.java:4: 软件包 com.bruceeckel.util 不存在
import com.bruceeckel.util.*;
^
DirList.java:13: 无法访问 AlphabeticComparator
错误的类文件: .\AlphabeticComparator.class
类文件包含错误的类: com.bruceeckel.util.AlphabeticComparator
请删除该文件或确保该文件位于正确的类路径子目录中。
    Arrays.sort(list, new AlphabeticComparator());
                          ^
2 错误
但我把要测试的java文件放在E:\Study\Practise\com下,就能顺利通过,结果也正确,这是为什么呢?
以下为DirList.java文件:
import java.io.*;
import java.util.*;
import java.util.regex.*;
import com.bruceeckel.util.*;
public class DirList {
  public static void main(String[] args) {
    File path = new File(".");
    String[] list;
    if(args.length == 0)
      list = path.list();
    else
      list = path.list(new DirFilter(args[0]));
    Arrays.sort(list, new AlphabeticComparator());
    for(int i = 0; i < list.length; i++)
      System.out.println(list[i]);
  }
}
class DirFilter implements FilenameFilter {
  private Pattern pattern;
  public DirFilter(String regex) {
    pattern = Pattern.compile(regex);
  }
  public boolean accept(File dir, String name) {
    // Strip path information, search for regex:
    return pattern.matcher(
      new File(name).getName()).matches();
  }

解决方案 »

  1.   

    Java找 class 的方法是从你的 classpath里面找的。。看你的classpath是怎么设置的?是不是  如果你的是  .;%JAVAHOME%; 这样的话...他会现在当前的路径下找..然后会去找你的Java路径..你放在com\bruceeckel\util 下..他在当前路径下 找不到  com.bruceeckel.util包..所以会报错.. 你在第二个里面就可以找到...这样知道了???
      

  2.   

    com.bruceeckel.util.*; 
    按照c:\com\bruceeckel\util\做文件及,然后把他的文件放进去
    把你的.java文件就放在c:盘下
      

  3.   

    把所有的.java放在一个目录下面(如果有package则按照子目录防止),然后使用
    javac *.java 
      

  4.   

    问题一:你可以进入   E:\Study\Practise\后,用javac  com.bruceeckel.util.DirList.java 即可搞定;
    你要记着,javac 编辑时,他不会去上一级找路径的,也就是说,可以往下,不会往上呀,因上一级可以会很我的选项呀!
      

  5.   

    恩,你的解释还好理解,但我有产生三个问题:
    问题1:
    我依次把
    E:\Study\Practise\com\bruceeckel\util; 
    E:\Study\Practise\com
    E:\Study\Practise\
    放进classpath然后在E:\Study\Practise\com\bruceeckel\util底下编译还是通不过
    问题2:
    网上classpath设置方法都不一样,有的说把C:\Program Files\Java\jdk1.5.0_16\lib目录下的dt.jar和tools.jar设为classpath,有的却没要dt.jar!到底是怎么着?问题3:
    我想把com包打成jar包,放在C:\Program Files\Java\jdk1.5.0_16\lib下加进classpath怎么打啊?非常感谢!!
      

  6.   

    设置classpath=.
    进入  E:\Study\Practise\后,用javac  com.bruceeckel.util.DirList.java 
    生成com.bruceeckel.util.DirList.class文件
    最后java  com.bruceeckel.util.DirList看结果
    这样一改没有什么问题了吧!!!
    你路径不对
      

  7.   

    我按你说的把classpath设置为当前目录,然后运行,结果是:
    E:\Study\Practise>javac com.bruceeckel.util.DirList.java
    错误:无法读取: com.bruceeckel.util.DirList.java
    1 错误

      

  8.   

    搞定没有呀,上面的方法都不行吗,你这个照做试了吗,如果是想你那样用的,你要cd E:\Study\Practise\com\bruceeckel\util下方行呀
      

  9.   

    谢谢你,我又产生三个问题:
    问题1: 
    我依次把 
    E:\Study\Practise\com\bruceeckel\util; 
    E:\Study\Practise\com 
    E:\Study\Practise\ 
    放进classpath然后在E:\Study\Practise\com\bruceeckel\util底下编译还是通不过 
    问题2: 
    网上classpath设置方法都不一样,有的说把C:\Program Files\Java\jdk1.5.0_16\lib目录下的dt.jar和tools.jar设为classpath,有的却没要dt.jar!到底是怎么着? 
    问题3: 
    我想把com包打成jar包,放在C:\Program Files\Java\jdk1.5.0_16\lib下加进classpath怎么打啊
      

  10.   

    设置classpath=. 记住是.
    这样系统自己找工具包,省去很多麻烦!!!!
    同时你把进入  E:\Study\Practise\后,用javac  com.bruceeckel.util.DirList.java 
    生成com.bruceeckel.util.DirList.class文件 
    最后java  com.bruceeckel.util.DirList看结果 这样应该没问题了,
    有问题你再说!!!
      

  11.   

    呵呵,我知道,把classpath设置成点.是从当前目录找所要编译的类,可是我按照你说的执行,结果如下:
    E:\Study\Practise>javac com.bruceeckel.util.DirList.java
    错误:无法读取: com.bruceeckel.util.DirList.java
    1 错误

    编译就无法通过,我解决的办法是把DirList.java放在 E:\Study\Practise\下,就可以顺利编译了,可是我又产生了两个问题:
    问题1: 
    网上classpath设置方法都不一样,有的说把C:\Program Files\Java\jdk1.5.0_16\lib目录下的dt.jar和tools.jar设为classpath,有的却没要dt.jar!到底是怎么着? 
    问题2: 
    我想把com包打成jar包,放在C:\Program Files\Java\jdk1.5.0_16\lib下加进classpath怎么打啊?
    其实非常谢谢你,你别急,这么漂亮的姑娘生气可不好看!呵呵
      

  12.   

    查看你的classpath环境变量,是不是有生成的这个程序.class文件所在的目录,如果没有添加就对了。
    或者干脆把他们放在一个包里就不会有问题了。
    主要原因是因为在查找路径的时候是当前路径,然后是系统路径,如果都没有就会报错了。