我的任务是将文件保存在最终用户指定的路径中(必须是绝对路径)。目前面临三种不同的方案,如下所示:
- 路径名是无效的(无法创建) - for ex,用户提供的路径名: sfg rgdf gfggdgfudf
- 路径名是无效的(但是,可以创建) - for ex:c:c: parent child child Grandchildren(shere c: parent parent 存在儿童孙子不。
- 路径名是有效的(即存在目录) - for ex:c: parent test
对于第一种情况,我需要将文件保存在默认位置中。第二个,我需要创建目录并保存文件。最后,我将保存在指定的路径中。
下面是我的代码段,它将文件保存在默认位置中的第一和第二方案。很难区分第一和第二。 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)对于第一个案例,请使用Regex确定路径是否有效
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)如果路径通过第一个方法有效,并且如果存在第二种方法。
kut igeiguye jh愉快地接受了大多数文件系统。如果您不想在路径/文件名中的空间,则已经需要自己检查有效性,例如使用正则表达式。
感谢所有添加其输入的人。我对有效的代码进行了几乎没有更改。我的作业要求之一是我的程序必须将绝对路径作为输入。有了我以下代码,可以将数据保存在情况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);
您可以使用isfile()在contists()上有效。我尚未检查所有情况,但这应该对您有所帮助。
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;
}
}
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()。