2015-04-08 384 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個子文件夾中的文件系統的每個文件夾中使用它。但謝謝你的答案。 –