Is there a way in Java to determine if a path is valid without attempting to create a file?
Path class introduced in Java 7 adds new alternatives, like the following:
/** * <pre> * Checks if a string is a valid path. * Null safe. * * Calling examples: * isValidPath("c:/test"); //returns true * isValidPath("c:/te:t"); //returns false * isValidPath("c:/te?t"); //returns false * isValidPath("c/te*t"); //returns false * isValidPath("good.txt"); //returns true * isValidPath("not|good.txt"); //returns false * isValidPath("not:good.txt"); //returns false * </pre> */public static boolean isValidPath(String path) { try { Paths.get(path); } catch (InvalidPathException | NullPointerException ex) { return false; } return true;}
Edit:
Note Ferrybig'scomment : "The only disallowed character in a file name on Linux is the NUL character, this does work under Linux."
This would check for the existance of the directory as well.
File file = new File("c:\\cygwin\\cygwin.bat");if (!file.isDirectory()) file = file.getParentFile();if (file.exists()){ ...}
It seems like file.canWrite() does not give you a clear indication if you have permissions to write to the directory.
File.getCanonicalPath()
is quite useful for this purpose. IO exceptions are thrown for certain types of invalid filenames (e.g. CON
, PRN
, *?*
in Windows) when resolving against the OS or file system. However, this only serves as a preliminary check; you will still need to handle other failures when actually creating the file (e.g. insufficient permissions, lack of drive space, security restrictions).