новый файл («») по сравнению с новым файлом («.»): функция или ошибка?

новый файл ("") и новый файл (".") приводят к одному и тому же каноническому пути, однако первый объект не подлежит субблокированию. Рассмотрим ниже код, и как оба объекта возвращают один и тот же канонический путь. В документации указано, что канонический путь является «абсолютным и уникальным». Но только файл, созданный с расширением "." аргумент действительно применим.

Разве в какой-то момент не должно быть сгенерировано исключение? Либо в вызове конструктора пустой строки (поскольку созданный объект кажется недействительным), либо, по крайней мере, в getCanonicalPath (который, по крайней мере, объявляет IOException)?

import java.io.File;
import java.io.IOException;

public abstract class Test {

    public static void main(String[] args) throws Exception {
        testFile("");
        testFile(".");
    }

    private static void testFile(String arg) throws IOException {
        System.out.format("File constructor argument: \"%s\"\n", arg);
        File g = new File(arg);
      System.out.format("toString()            = \"%s\"\n", g.toString());
        System.out.format("getAbsolutePath()     = \"%s\"\n", g.getAbsolutePath());
        System.out.format("getAbsoluteFile()     = \"%s\"\n", g.getAbsoluteFile());
        System.out.format("getgetCanonicalPath() = \"%s\"\n", g.getCanonicalPath());
        System.out.format("getgetCanonicalFile() = \"%s\"\n", g.getCanonicalFile());
        System.out.format("exists()              = %s\n", g.exists());
        System.out.format("isDirectory()         = %s\n", g.isDirectory());
        System.out.println();
  }
}

И вывод, который он производит:

File constructor argument: ""
toString()            = ""
getAbsolutePath()     = "C:\usr\workspace\Test"
getAbsoluteFile()     = "C:\usr\workspace\Test"
getgetCanonicalPath() = "C:\usr\workspace\Test"
getgetCanonicalFile() = "C:\usr\workspace\Test"
exists()              = false
isDirectory()         = false

File constructor argument: "."
toString()            = "."
getAbsolutePath()     = "C:\usr\workspace\Test\."
getAbsoluteFile()     = "C:\usr\workspace\Test\."
getgetCanonicalPath() = "C:\usr\workspace\Test"
getgetCanonicalFile() = "C:\usr\workspace\Test"
exists()              = true
isDirectory()         = true

33
задан Joachim Sauer 4 May 2011 в 13:11
поделиться