最初我在类路径的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语句如下:
import java.io.*;
然后我得到一个错误,基本上说明找不到File.separatorChar。
我认为正在发生的是import java.io. *正在使用类路径中的jar中的类,而import java.io.File则专门使用Java附带的File类。
这里的问题是为什么导入java.io.File工作而java.io. *不工作?
答案 0 :(得分:1)
在一个空项目中,代码仍然使用import java.io.*
进行编译,因此似乎使用了另一个类。如果您使用Eclipse,则可以检查File
的工具提示以查看它是哪个类。
或者,您可以使用
System.out.println(File.class.toString())
将在运行时打印出类。
答案 1 :(得分:1)
正如EJP对原始问题发表评论,
这是正确的。导入java.io. *为编译器提供了另一个查找不在当前包中的类的位置。导入java.io.File告诉编译器使用哪个File。道德:不要重用JDK类名。
答案 2 :(得分:0)
你必须在别的地方弄乱别的东西。
编译时
import java.io.*;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("separatorChar= " + File.separatorChar);
}
}
我得到了
c:\files\j>javac HelloWorld.java
c:\files\j>java HelloWorld
separatorChar= \
答案 3 :(得分:-1)
使用java.io. *;所有你看到的都是文件,所以代替File.seperatorChar,到达separatorChar的路由是io.file.separaterChar。它涉及起点。它就像一个文件系统......如果你在/ users / matt中你输入/documents/mytext.txt,那么完整的路径是C:/users/matt/documents/mytext.txt如果我退回给用户文件,然后相同的命令(/documents/mytext.txt)将查找不存在的C:/users/documents/mytext.txt。希望有所帮助。