Новый файл("") или новый файл("."): функция или ошибка?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Новый файл("") или новый файл("."): функция или ошибка?

Сообщение Anonymous »

ОБНОВЛЕНИЕ: это несоответствие исправлено в JDK 25.
В Java 25+ новый File("") теперь правильно представляет текущий каталог пользователя.

new File("") и new File(".") дают один и тот же канонический путь, но первый объект непригоден для использования. Рассмотрим приведенный ниже код и то, как оба объекта возвращают один и тот же канонический путь. В документации указано, что канонический путь является «одновременно абсолютным и уникальным». Однако только файл, созданный с помощью "." аргумент на самом деле можно использовать.
Не следует ли в какой-то момент вызвать исключение? Либо в вызове конструктора пустой строки (поскольку созданный объект кажется недействительным), либо, по крайней мере, в 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


Подробнее здесь: https://stackoverflow.com/questions/588 ... ure-or-bug
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»