最初我在类路径的jar中有一个java.io.File类,它没有separatorChar属性。因此,我遇到了以下代码块运行的问题:
import java.io.File;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("separatorChar= " + File.separatorChar);
}
}
但我更改了进口声明如下:
import java.io.*;
然后我得到一个错误,基本上是说找不到File.separatorChar。
我认为,importjava.io.*使用的是类路径中jar中的一个类,而importjava.io.File则专门使用java附带的File类。
这里的问题是,为什么导入java.io.File有效,而java.io.*无效?
在一个空的Project中,代码仍然使用import java.io.*
编译,因此似乎使用了另一个类。如果你使用Eclipse,你可以查看File
的工具提示,看看它是哪个类
或者,您可以使用
System.out.println(File.class.toString())
它将在运行时打印出类。
正如EJP对原始问题的评论,
这是正确的。importjava.io.*为编译器提供了另一个查找当前包中没有的类的位置。导入java.io.File告诉编译器要使用哪个文件。寓意:不要重复使用JDK类名。
你一定是在别的地方搞砸了。
当我编译时
import java.io.*;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("separatorChar= " + File.separatorChar);
}
}
我得到
c:filesj>javac HelloWorld.java
c:filesj>java HelloWorld
separatorChar=
当您使用java.io.*时;你看到的只是文件,所以到达separatorChar的路径不是file.seperatorChar,而是io.file.separaterChar。它处理起点在哪里。这就像一个文件系统。。。如果您在/users/matt中,并键入/documents/mytext.txt,则完整路径为C:\users/matt/documents/mytext.txt。如果我返回到users文件,则相同的命令(/documents/metext.txt)将查找不存在的C:\users/documents/myext.txt。希望能有所帮助。