2015-04-08 131 views
1

我想控制我的文件在哪个文件夹中。Java拆分目标路径

我具有一定的文件夹结构工作:

  1. 主文件夹
  2. 处理子
  3. 处理子

写我的单元测试,我想把测试文件夹中提供以下文件夹结构的目标文件

目标\测试夹\

这是主要的文件夹

目标\测试夹\处理\

这是子文件夹处理

target \ test-folder \ processed

这是处理

我想打印出该文件夹中的某个文件的子文件夹,我想要做的是以下几点:

String[] directories = PATH.split("\""); 
System.out.println(directories[directories.length - 2]); 

当我调试我看到我的阵列目录只包含1项,整个路径,所以我的分裂可能是错误的。

我应该把什么作为split值?

+3

也应该可以使用类型'路径'或'文件'。 – Raedwald

+0

我同意@Raedwald。你不应该做字符串操作,而是使用File对象,找出父对象,等等 –

+0

Ok看起来是一个好的解决方案。 –

回答

2

首先,您使用反斜杠作为转义字符而不是您想要的。你应该与参数"\\"分离,但是我建议你使用FileSystems.getDefault().getSeparator()而不是反斜杠,所以它可能运行在linux或者其他任何系统上(甚至在一些人们使用^作为路径分隔符的神奇的地方)。遗憾的是在Windows中,它返回\(这是转义字符),所以你必须使用Pattern.quote(String)

的代码看起来应该是这样引用它:

String[] directories = PATH.split(Pattern.quote(FileSystems.getDefault().getSeparator())); 
+0

这抛出:java.util.regex.PatternSyntaxException:索引1附近的意外的内部错误 \ –

+0

编辑我的答案,请再试一次 – novy1234

+0

它的工作原理。感谢您的努力,您值得信贷! –

1

相反,你应该使用内置的类拆分字符串,如Path。人为的例子来访问路径中的单个元件:

Path p = Paths.get("target/test-folder/processed"); 
for (Path element : p) System.out.println(element); //loop over all elements 
System.out.println(p.getName(2)); //access a specific element 

,其输出:

目标
测试文件夹
处理
处理

+0

一个小细节,这需要是动态的。因此需要在2个子文件夹中的文件系统的每个文件夹中使用它。但谢谢你的答案。 –