2017-08-31 287 views
1

我的任務是將文件保存在最終用戶指定的路徑中(必須是絕對路徑)。我目前面臨着三個不同的場景如下:如何檢查文件路徑是否無效/在java中不存在

  1. 路徑名稱是無效的(無法創建)-爲前,路徑名稱由用戶提供:SFG RGDF gfggdgfudf
  2. 路徑名無效(但是,它可以創建)-爲前:C:\父母\兒童\孫子(這裏C:\家長存在而兒童\孫子沒有
  3. 路徑名有效(即目錄中S)-爲前:C:\父母\測試

對於第一種情況,我需要將文件保存在默認位置。 第二,我需要創建目錄並保存文件。 最後,我會保存在指定的路徑。

下面是我的代碼片段,它將文件保存在第一個和第二個場景的默認位置。我很難區分第一和第二。 java.io.File.mkdirs適用於第二種情況,但不適用於第一種情況。 作爲這門編程語言的新手,請忽略我可憐的代碼。任何投入將非常感激。

//User input must be absolute path 
String saveToFolder = "kut igeiguye jh"; 
String defaultFolder = "C:\\Parent\\Data"; 
try{ 
    File file = new File(saveToFolder); 
    if(!file.exists()){ 
     saveToFolder = defaultFolder; 
    } 
    file.mkdirs(); 
    }catch(Exception e){ 
    saveToFolder = defaultFolder; 
    } 
//code to save data in path **saveToFolder** 
+1

你爲什麼認爲'sfg rgdf gfggdgfudf'是一個無效路徑?這是有效的。它指向當前目錄中名爲'sfg rgdf gfggdgfudf'的目錄。 –

+0

這裏看看克里斯托弗Oezbek的回答,他列出了無效的路徑字符,這樣你就可以過濾像 myFolderPath.contains字符串(「」) 或 myFolderPath.matches(「regex_for_invalid_characters」) https://開頭計算器。 com/questions/1976007/what-c​​haracters-are-in-in-windows-and-linux-directory-names –

回答

0

感謝所有添加了他們的投入的人。我對我的代碼做了一些改變。我的一項任務要求是我的程序必須採用絕對路徑作爲輸入。 用我的下面的代碼,可以將數據保存在情況1的默認位置;正在創建新文件夾,文件正在保存在案例2新創建的文件夾中;並將文件保存在指定的路徑的情況下3

String saveToFolder = "kut igeiguye jh"; 
    String defaultFolder = "C:\\Parent\\Data"; 

    try{ 
     File file = new File(saveToFolder); 
     boolean dirCreated = file.mkdirs(); 
     if(!dirCreated || (file.getParent().equals(null))){ 
      saveToFolder = defaultFolder; 
     } 
    }catch(Exception e){ 
     saveToFolder = defaultFolder; 
    } 

    System.out.println("save to folder : " +saveToFolder); 
1

kut igeiguye jh很高興地被大多數文件系統接受。如果你的路徑/文件名不需要空格,你就必須自己檢查一下有效性。使用正則表達式。

+0

我正在使用絕對路徑,在這種情況下** kut igeiguye jh **對我無效。 – user8478502

2

1)對於第一殼體使用正則表達式來確定是否路徑是有效或不

String regularExpression = "([a-zA-Z]:)?(\\[a-zA-Z0-9_-]+)+\\?" ; // this regex for windows. If you are running in linux then regex will be different. 

    Pattern pattern = Pattern.compile(regularExpression); 

    boolean isMatched = Pattern.matches(regularExpression,saveToFolder); 

2)檢查路徑是有效或不再次使用第一方法。如果它的有效檢查文件夾是否存在。

File f = new File(saveToFolder); 
if (f.exists() && f.isDirectory()) { 
    ... 
} 

3)如果路徑是有效的第一種方法,如果它存在第二種方法。

+0

這是平臺相關的。 –

+0

同意我編輯了答案 –

0

你可以使用ISFILE()來有效存在超過()。我沒有檢查所有情況,但這應該對你有所幫助。

public static void checkPath(){ 
    String saveToFolder = "file/User.txt"; 
    String defaultFolder = "file/data/"; 
    try{ 
     File file = new File(saveToFolder); 
     if(!file.isFile()){ 
      saveToFolder = defaultFolder; 
      System.out.println("File not found"); 
     } 
     file.mkdirs(); 
     }catch(Exception e){ 
      saveToFolder = defaultFolder; 
     } 
    } 
0

Java NIO使這個很簡單。方法Files.createDirectories成功,無論該目錄是否已經存在或不存在並且已經創建。

try { 
    Files.createDirectories(Paths.get(saveToFolder)); 
} 
catch (IOException e) { 
    System.err.println("Using default folder due to the following exception: " + e); 
    saveToFolder = defaultFolder; 
} 

如果你真的要檢查用戶是否輸入了絕對路徑,只要使用Path.isAbsolute()

相關問題