我会尽量保持简短:) 所以我有这段代码,它的功能是在用户指定的目录中生成文件。该代码的部分包括:
- 首先发现用户甚至想要创建该文件
- 找出文件名(扫描仪,确保文件名有扩展名)
- 找出用户指定的目录(扫描程序,检查用户输入的目录是否有效,检查目录是否存在,如果不存在,则创建一个新目录)
- 创建文件(假设该文件尚不存在)
我的问题在 1 和 2 中。
问题 1:用户可以输入“.txt”之类的内容,然后就可以创建文件,而实际上,您需要输入实际名称。 (我做了一些检查文件是否有扩展名的东西。也许类似的东西?)
问题2:开始部分的Do while循环没有退出...为什么...
代码:
package filecreator;
import java.io.File;
import java.io.IOException;
import java.util.*;
public class FileCreator {
public static Scanner sc = new Scanner(System.in);
public static boolean success = false;
public static String filename;
public static String filedir;
public static String fileexten;
public static String filedir2;
public static File file;
public static File dir;
public static void main(String[] args) throws IOException {
System.out.println("********************************");
System.out.println("* Welcome to File Creator 2.0! *");
System.out.println("********************************");
System.out.println(" ");
//Starting prompt
while(!success) {
System.out.println("Would you like to create a file? Y/N?");
String usrans = sc.nextLine();
if(usrans.equalsIgnoreCase("y")) {
System.out.println("Proceeding with file creation...");
System.out.println(" ");
break;
} else if(usrans.equalsIgnoreCase("n")) {
System.out.println("Exiting Program...");
System.exit(0);
} else if(!usrans.equalsIgnoreCase("y") || !usrans.equalsIgnoreCase("n")) {
System.out.println("That is not a valid answer! Please try again!");
System.out.println(" ");
}
}
System.out.println("Please enter a valid file name:");
//choosing name of file
while(!success) {
filename = sc.nextLine();
fileexten = filename.substring(filename.lastIndexOf(".") + 1);
if(filename.isEmpty()) {
System.out.println("Please enter a file name!");
} else if(filename.contains("/") || filename.contains(":") ||
filename.contains("*") || filename.contains("?") ||
filename.contains("<") || filename.contains(">") ||
filename.contains("|") || filename.contains("\"") ||
filename.contains("\\")) {
System.out.println("Please do not include / \\ : * ? \" < > |");
} else if(!filename.contains(".")) {
System.out.println(" ");
System.out.println("Please specify a valid file extension!");
} else if (fileexten.isEmpty() || fileexten.contains("[^\\p{IsDigit}\\p{IsAlphabetic}]")) {
System.out.println(" ");
System.out.println("Please specify a valid file extension!");
} else {
System.out.println(" ");
System.out.println("File name \"" + filename + "\" chosen");
break;
}
}
System.out.println(" ");
System.out.println("Where would you like to have your file saved?");
System.out.println("Please enter a valid directory");
//finding directory if directory exists and creating one if it dosent
while(!success) {
filedir = sc.nextLine();
dir = new File(filedir);
do {
System.out.println(""
+ "That is not a valid directory");
filedir = sc.nextLine();
} while((!filedir.contains(":") && !filedir.contains("\\")));
System.out.println("Checking to see if directory exists...");
if(!dir.exists()) {
System.out.println("Directory does not exist! Would you like to create one? Y/N?");
String usrans = sc.nextLine();
if(usrans.equalsIgnoreCase("y")) {
dir = new File(filedir);
success = dir.createNewFile();
if(!success) {
System.out.println("Created!");
break;
} else {
System.out.println("Something went wrong! Aborting Program...");
System.exit(0);
}
} else if(usrans.equalsIgnoreCase("n")) {
System.out.println("Directory not created! Aborting program...");
System.exit(0);
} else if(!usrans.equalsIgnoreCase("y") || !usrans.equalsIgnoreCase("n")) {
System.out.println("That is not a valid answer!");
}
}
}
System.out.println(" ");
System.out.println("Looking to see if \"" + filename + "\" already exists...");
file = new File(filedir,filename);
if(file.exists()) {
System.out.println(" ");
System.out.println("\"" + filename + "\"" + " already exists! Closing Program...");
System.exit(0);
} else {
System.out.println(" ");
System.out.println("\"" + filename + "\"" + " doesn't exists! Creating now...");
file.createNewFile();
success = file.createNewFile();
if(!success) {
System.out.println(" ");
System.out.println("\"" + filename + "\"" + " successfully created!");
} else {
System.out.println(" ");
System.out.println("Error! File not created");
}
}
}
}
最佳答案
解决方案 1:使用以下内容来检查文件名的有效性,而不是那些长条件子句。
if ( filename.toLowerCase().matches( "[a-z0-9_-][a-z0-9_.-]*\\.[a-z0-9]+" ) )
解决方案 2:因为您的程序希望用户输入 n 来退出,而不是自行结束。
关于java - 如何检查特定字符之前是否有字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45923165/