我正在尝试制作一个程序,如果文件存在,它将读取该文件。如果文件不存在,那么我希望它返回并再次请求用户输入。现在我已经知道了,它会停下来,但我想让它回过头来,再问一次,有什么想法吗?
System.out.println("Enter the file you want to check (without file extension): ");
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
String in = (input + ".txt");
File f = new File(in);
if(!f.exists()) {
System.out.println(in + " doesn't exist! Try again.");
return;
}
String fileName = input;
String content = readFile(in);
System.out.println(content);
我不喜欢当和当(假)时,甚至当(真)和中断时。
如果它不是太多的工作,我会这样做:
Scanner scanner = new Scanner(System.in);
File f = getFile();
while (!f.exist()) {
f = getFile();
}
private File getFile() {
System.out.println("Enter the file you want to check (without file extension): ");
String input = scanner.nextLine();
String in = (input + ".txt");
File f = new File(in);
if (!f.exists()) {
System.out.println(in + " doesn't exist! Try again.");
}
return f;
}
这避免了丑陋的do while循环,并很好地封装了获取逻辑。理论上,您也可以使其递归(尽管这允许堆栈溢出),或者让它在中返回文件的一对,这将输入提升到外部循环,从而允许循环访问中的变量。
只是为您提供了一个更经典的while循环来实现这一点。
请注意,@Bathsheba的答案非常简洁,你绝对应该接受他的答案。
System.out.println("Enter the file you want to check (without file extension): ");
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
String in = (input + ".txt");
File file = new File(input);
while(!file.exists()){
System.out.println(in + " doesn't exist! Try again.");
input = scanner.nextLine();
in = (input + ".txt");
file = new File(input);
}
一种方法是使用do
,while(false)
循环(允许f
作用域为循环体):
Scanner scanner = new Scanner(System.in);
do {
System.out.println("Enter the file you want to check (without file extension): ");
String input = scanner.nextLine();
String in = (input + ".txt");
File f = new File(in);
if(!f.exists()){
System.out.println(in + " doesn't exist! Try again.");
continue; /*go round again*/
}
} while (false/*i.e. exit the loop if we get here*/);
如果希望在循环后可用,则声明文件f do{/code>行之前,将{code>f=new File(in);写入循环体。
我正在尝试编写HTML输出文件。文件已经编写好,一切都很好,但我想知道是否有方法将字符串与文件名结合起来,检查是否存在,如果存在,然后以某种方式更改该字符串。所以我永远不会覆盖已经存在的文件。 所以在这种情况下,如果outputFile是,让我们说“Jesus”,那么我想做一些事情,如果我运行这个3次,我会得到类似Jesus的东西。html,Jesus2。html,Jesus3。html。不必像那
我正在批量插入同一分区的多行,如果不存在。从我的测试中可以看出,如果任何行是重复的,则所有插入都将失败,并且不会插入任何行。我想保留if不存在行为,但如果存在重复项并且仍然插入非重复行,则不会使批处理失败。有没有办法告诉卡桑德拉,如果有重复项,不要让批处理失败?
问题内容: 如果电子邮件地址在list_email.email_addr中不存在且在list_no_email.email_addr中不存在,我正在尝试插入新记录 *_ __ _ __ __ * 错误 * __ __ * * *_ __ _ __ __ 不带; __ * __ __ * __ ** 问题答案: 代替 和 编辑 代替 和
我有以下代码 它返回错误: 如果我使用运行,我不会收到任何错误。不幸的是,我真的不能在无头状态下运行我想运行的东西。有人有什么想法吗?
我在android Studio中创建了多个android项目,并注意到它们都不包含清单文件中的uses-sdk标签。据我所知,谷歌开发人员教程清单文件需要它。我在网上的任何地方都没有找到任何关于它不存在的解释。我确信我在项目创建期间选择的min sdk正在被无误地使用,否则我将不得不使用支持库来处理一些事情,例如操作栏。我知道这也在build.gradle文件中定义,但如何在网上的任何地方都找不
iam运行一个硒脚本,并继续得到上述错误。这是代码: 所以代码中的注释行对我不起作用。当我添加这一行时,我总是得到这个错误: 并且代码在没有添加上述代码行的情况下也能正常工作。 以下是关于该错误的更多信息: 系统信息: 视窗 7 SP-1 64 位 Chrome信息:版本71.0.3578.98(官方版本)(64位) Java 版本: 10.0.1 请帮我做这件事。