I am trying to write a function which will validate weather the given path is valid in Linux/Windows with file extension.
ex:
Windows path: D:\\DATA\\My_Project\\01_07_03_061418738709443.doc
Linux path: /source_data/files/08_05_09_1418738709443.pdf
The code that I have tried is
static String REMOTE_LOCATION_WIN_PATTERN = "([a-zA-Z]:)?(\\\\[a-z A-Z0-9_.-]+)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)\\\\?";
static String REMOTE_LOCATION_LINUX_PATTERN = "^(/[^/]*)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)/?$";
public boolean checkPathValidity(String filePath) {
Pattern linux_pattern = Pattern.compile(REMOTE_LOCATION_LINUX_PATTERN);
Pattern win_pattern = Pattern.compile(REMOTE_LOCATION_WIN_PATTERN);
Matcher m1 = linux_pattern.matcher(filePath);
Matcher m2 = win_pattern.matcher(filePath);
if (m1.matches() || m2.matches()) {
return true;
} else {
return false;
}
}
This function gives result true if path is valid in either windows/linux. The above function is not returning right result for some of the paths that contain dates, _ ? , * in their path.
static String REMOTE_LOCATION_WIN_PATTERN = "([a-zA-Z]:)?(\\\\[a-z A-Z0-9_.-]+)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)\\\\?";
static String REMOTE_LOCATION_LINUX_PATTERN = "^(/[^/]*)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)/?$";
static Pattern linux_pattern = Pattern.compile(REMOTE_LOCATION_LINUX_PATTERN);
static Pattern win_pattern = Pattern.compile(REMOTE_LOCATION_WIN_PATTERN);
static final boolean WINDOWS = System.getProperty("os.name").startsWith("Windows");
public boolean checkPathValidity(String filePath) {
Matcher m = WINDOWS ? win_pattern.matcher(filePath) : linux_pattern.matcher(filePath);
return m.matches();
}
You can basically combine the two patterns as follows:
[a-zA-Z]:\\\\(?:([^<>:"\\/\\\\|?*]*[^<>:"\\/\\\\|?*.]\\\\|..\\\\)*([^<>:"\\/\\\\|?*]*[^<>:"\\/\\\\|?*.]\\\\?|..\\\\))?
\\/.*
(\\/.*|[a-zA-Z]:\\\\(?:([^<>:"\\/\\\\|?*]*[^<>:"\\/\\\\|?*.]\\\\|..\\\\)*([^<>:"\\/\\\\|?*]*[^<>:"\\/\\\\|?*.]\\\\?|..\\\\))?)
This works fine on my angular input tag pattern validation.
Check the ling for more details How would I match a pattern for both windows and Linux directory path?
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.