2015-04-17 2 views
0

Как получить разделитель файлов указанного пути к файлу/папке?Получить файл.сепаратора заданного пути к файлу

В Java, мы можем написать, например

File f = new File("C:\\MyFolder\\MyText.txt"); 

Имейте в виду, что это файл представления (файл не должен существовать физически). Итак, если задан какой-либо указанный путь, существует ли метод, который может возвращать разделитель только для указанного пути?

От docs

File.pathSeparator и File.pathSeparatorChar возвращает систему в зависимости разделительного файла, но то, что я хочу это разделитель для данного пути, как и в предыдущем случае \, даже если выше программа запускается и путь не имеет значения для * nix

+0

Все пути имеют разделитель 'File.separator'. – immibis

+0

Другими словами, в Linux, 'f' является вполне допустимым путем, с разделителем'/', ссылаясь на файл с именем' C: \ MyFolder \ MyTest.txt' в текущем каталоге. (Обратные косые черты разрешены в именах файлов в Linux) – immibis

+0

Я хочу, чтобы разделитель по указанному пути, а не зависит от ОС – Nederealm

ответ

0

Символ-разделитель для File объектов всегда задается File.separator (или File.separatorChar). Невозможно построить объект File с необычным разделителем; они всегда содержат пути, действующие на текущую систему.

File f = new File("C:\\MyFolder\\MyText.txt"); 

После выполнения этой строки в Windows, f относится к File объект, который ссылается на файл MyText.txt в папке MyFolder на диске C:, как вы, вероятно, предполагалось.

Но в Linux f относится к объекту File, который ссылается на файл C:\MyFolder\MyText.txt в текущем каталоге. (В Linux обратные косые черты разрешены в именах файлов)

Представьте, если бы был способ сделать это. Если бы вы построили Файл с new File("a/b\\c"), то как вы знаете, был ли он со ссылкой на файл b\c в папке a (с разделителем /), или файл c в папке a/b (с разделителем \)?

Этого не может быть, поэтому должно быть ясно, что надежного способа сделать это нельзя. Если ваша программа обрабатывает пути с необычными разделителями, ваша программа должна обрабатывать их самостоятельно. File не может сделать это за вас.

+0

Итак, что происходит, когда вы вызываете mkdirs для приведенного выше примера? Является ли платформа поведения зависимой? – Nederealm

+0

@Nederealm Что конкретно вы спрашиваете? Он создает указанный каталог и его родительский каталог рекурсивно, если он еще не существует. – immibis

+0

создает ли папки b \ c в папке a или папках a/b, так как не может узнать, является ли c файлом? – Nederealm

1

Я бы начал с System.getProperty("user.home"). И, вы можете использовать File.seperator как

File f = new File(System.getProperty("user.home") + 
     File.seperator + "MyText.txt"); 

, но я бы предпочел File(String parent, String child) как

File f = new File(System.getProperty("user.home"), "MyText.txt"); 
System.out.println(f.getPath()); 
Смежные вопросы