Могу ли я составить два пути к файлам без использования методов toString ()? - PullRequest
3 голосов
/ 31 августа 2011

Представьте, что у меня есть "базовый" объект пути, обозначающий каталог, и "относительный" объект пути, обозначающий некоторый файл в базе.

Я ожидаю, что этот код будет выглядеть примерно как

AbsolutePath base = new AbsolutePath("/tmp/adirectory");
RelativePath relativeFilePath = new RelativePath("filex.txt");
AbsolutePath absoluteFile = base.append( relativeFilePath );

Но в Java API (который я пока не очень хорошо знаю) я нахожу только File, с которым я ничего не могу сделать лучше, чем

File base = new File("/tmp/adirectory");
File relativeFilePath = new File("filex.txt");
File absoluteFile = base.toString() 
                  + File.separator 
                  + relativeFilePath.toString();

Есть ли лучший способ?

Ответы [ 4 ]

8 голосов
/ 31 августа 2011

Самое близкое, что вы можете получить с java.io.File, это File(File, String) конструктор :

File base = ...;
File relative = ...;
File combined = new File(base, relative.toString());

Если вы можете использовать Path* Класс 1012 * введен в Java 7, тогда вы можете использовать метод resolve() , который делает именно то, что вы хотите:

Path base = ...;
Path relative = ...;
Path combined = base.resolve(relative);

Обратите внимание, что если baseне абсолютный путь, тогда combined тоже не будет абсолютным!Если вам нужен абсолютный путь, то для File вы бы использовали getAbsoluteFile(), а для Path вы бы использовали toAbsoutePath().

4 голосов
/ 31 августа 2011

Да. new File(base, "filex.txt") создаст имена файлов "filex.txt" в базе каталогов.

Нет необходимости создавать relativeFilePath экземпляр файла только с относительным именем, если вы хотите сделать его относительным к каталогу, отличному от текущего.

1 голос
/ 31 августа 2011

В классе File есть несколько конструкторов, которые могут вас заинтересовать:

File base = new File("/tmp/adirectory");
File absolute = new File(base, "filex.txt");
File absolute2 = new File("/tmp/adirectory", "filex.txt");
1 голос
/ 31 августа 2011

как насчет:

File base = new File("/tmp/adirectory");
File absoluteFile = new File(base, "filex.txt");

РЕДАКТИРОВАТЬ: Слишком поздно @JB Низет отправил мне на почту ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...