2015-04-17 130 views
0

如何获取指定文件/文件夹路径的文件分隔符?获取指定文件路径的file.separator

在Java中,我们可以写,例如

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

请记住,这是一个文件表示(该文件不具有实际存在)。因此,给定任何指定的路径,是否有一种方法可以只返回指定路径的分隔符?

docs

File.pathSeparatorFile.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上线后,fFile对象是指文件MyText.txtMyFolder在驱动器C:,因为你可能预期。

但在Linux上,f引用File对象,该对象引用当前目录中的文件C:\MyFolder\MyText.txt。 (在Linux上,文件名允许反斜杠)

想象一下,是否有办法做到这一点。如果你有一个使用new File("a/b\\c")构建的文件,那么你怎么知道它是指文件夹a(分隔符/)中的文件b\c,还是文件夹a/b(分隔符\)中的文件c

它不能,所以应该清楚,没有可靠的方法来做到这一点。如果你的程序用不寻常的分隔符处理路径,那么你的程序需要自己处理它们。 File不能为你做。

+0

那么当你为上面的例子调用mkdirs时会发生什么?行为平台是否依赖? – Nederealm

+0

@Nederealm你在问什么?它创建指定的目录,如果它的父目录尚不存在,则递归创建。 – immibis

+0

是否会在文件夹a或文件夹a/b中创建文件夹b \ c,因为它无法知道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());