1

最初我在类路径的 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。

我认为正在发生的是 import java.io.* 正在使用类路径中 jar 中的类,而 import java.io.File 专门使用 Java 附带的 File 类。

这里的问题是为什么 import java.io.File 起作用而 java.io.* 不起作用?

4

4 回答 4

1

在一个空的项目中,代码仍然用 编译import java.io.*,所以似乎使用了另一个类。如果您使用 Eclipse,您可以检查工具提示File以查看它是哪个类。

或者,您可以使用

System.out.println(File.class.toString())

这将在运行时打印出类。

于 2012-07-12T17:35:09.737 回答
1

正如 EJP 对原始问题的评论,

那是对的。Import java.io.* 为编译器提供了另一个位置来查找不在当前包中的类。Import java.io.File 告诉编译器使用哪个 File。道德:不要重用 JDK 类名。

于 2012-07-16T21:35:10.557 回答
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= \
于 2012-07-12T17:33:16.053 回答
-1

当你使用 java.io.* 时;你所看到的只是文件,因此到达 separatorChar 的路径不是 File.seperatorChar,而是 io.file.separaterChar。它处理起点在哪里。这就像一个文件系统......如果你在 /users/matt 并且你输入 /documents/mytext.txt 完整路径是 C:/users/matt/documents/mytext.txt 如果我回到用户文件,然后相同的命令 (/documents/mytext.txt) 将查找不存在的 C:/users/documents/mytext.txt。希望有帮助。

于 2012-07-12T17:32:21.483 回答