当前位置: 首页 > 知识库问答 >
问题:

如果文件不存在,请重试[重复]

慕容品
2023-03-14

我正在尝试制作一个程序,如果文件存在,它将读取该文件。如果文件不存在,那么我希望它返回并再次请求用户输入。现在我已经知道了,它会停下来,但我想让它回过头来,再问一次,有什么想法吗?

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);

共有3个答案

张浩阔
2023-03-14

我不喜欢当和当(假)时,甚至当(真)和中断时。

如果它不是太多的工作,我会这样做:

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循环,并很好地封装了获取逻辑。理论上,您也可以使其递归(尽管这允许堆栈溢出),或者让它在中返回文件的一对,这将输入提升到外部循环,从而允许循环访问中的变量。

郑俊彦
2023-03-14

只是为您提供了一个更经典的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);

}
董霖
2023-03-14

一种方法是使用dowhile(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 请帮我做这件事。