コードFile file = new File("e:/");
でjava.lang.Fileクラスを取得したとき、もちろんe:\ディレクトリを表すFileクラスが得られました。これはjava jdkのバグですか?
コードがFile file = new File("e:");
のファイルクラスがあり、ドライブE:にある場合は、Fileクラスが現在のディレクトリを表しています。
私はディレクトリE:\ dir \にあり、このディレクトリにTest.javaという名前のファイルがあるとします。 イッツ内容は次のとおりです。
import java.io.File;
public class Test {
public static void main(String[] args) {
File file = new File("e:");
File[] files = file.listFiles();
for(File f: files){
System.out.println(f + " " + f.exists());
}
}
}
オープンディレクトリeに移動CMDツールと:DIR \、これで次のコマンドを実行します。
E:\dir> javac Test.java
E:\dir> java Test
私が得た:
e:\Test.class false
e:\Test.java false
これはjava jdkのバグですか? @JimGarrisonから
追加情報:
私は、このコードに(私のDに住んでいる:ドライブ)Eclipseで
public class Foo3
{
public static void main(String[] args) throws Exception
{
File f = new File("D:");
System.out.println(f.getCanonicalPath());
for (File x : f.listFiles())
System.out.println(x + " " + x.getCanonicalPath() + " " + x.getAbsolutePath() + " " + x.exists() + " " + x.getAbsoluteFile().exists());
}
}
を実行し、次の出力を得た:
D:\dev\src\pdxep
D:\.classpath D:\dev\src\pdxep\.classpath D:\dev\src\pdxep\.classpath false true
D:\.project D:\dev\src\pdxep\.project D:\dev\src\pdxep\.project false true
D:\.settings D:\dev\src\pdxep\.settings D:\dev\src\pdxep\.settings false true
D:\gallery D:\dev\src\pdxep\gallery D:\dev\src\pdxep\gallery false true
D:\pom.xml D:\dev\src\pdxep\pom.xml D:\dev\src\pdxep\pom.xml false true
D:\src D:\dev\src\pdxep\src D:\dev\src\pdxep\src false true
D:\target D:\dev\src\pdxep\target D:\dev\src\pdxep\target false true
これは、面白いことが起こっていることを確認します。
Java Bug 8130462は、相対的な絶対パスとは具体的にはWindowsで関係しているように関連しているようです。
非常に興味があります。私も問題を再現することができます。 –
上記のようにプログラムを実行しましたが(クラス名をTestFileに変更しましたが)、e:ドライブ(Windows 10)の期待される出力(ファイルやディレクトリのリストなど)を受け取りました。 Java 1.8.0_72を実行しています。 @ジムガリソンそれはあなたが問題を再現興味深いです。 Eclipseとコマンドラインの両方から実行してください。違いは、私はパッケージ名を持っていたので、java -cp ./bin package.TestFile – KevinO
デバッガで実行して 'println'で停止すると、パスと正規パスの間に違いがあることがわかります。表示される出力(現在のディレクトリが見つからない)は、ファイルの検索に使用されているようですが、標準パスの印刷には現在のディレクトリが含まれています。確かにバグ(Windowsファイルシステムプロバイダの実装にある可能性が高い)のように見えます。明示的な完全パス文字列からファイルを作成しても、この問題は発生しません。 –