我如何修改它,以便它不会让它破坏它只是请求用户再次输入文件名?

时间:2015-01-13 11:51:07

标签: java

问题

当用户将文件名输入程序时,它将创建一个异常,指出目录中没有名称相同的文件。

我想要的是 - 程序将重复要求用户输入文件名的消息,而不是显示异常。

我的代码:

import java.io.*;
import java.util.*;


public class reader {


static int validresults = 0;
static int invalidresults = 0;
//used to count the number of invalid and valid matches

public static boolean verifyFormat(String[] words) {
    boolean valid = true;
    if (words.length != 4) { 
        valid = false;
    } else if (words[0].isEmpty() || words[0].matches("\\s+")) {
        valid = false;
    } else if ( words[1].isEmpty() || words[1].matches("\\s+")) {
        valid = false;
    }

    return valid && isInteger(words[2]) && isInteger(words[3]);}

//checks to see that the number of items in the file are equal to the four needed and the last 2 are integers
//also checks to make sure that there are no results that are just whitespace

public static boolean isInteger( String input ) {
    try {
        Integer.parseInt( input );
        return true;
    }
    catch( Exception e ) {
        return false;
    }
}
//checks to make sure that the data is an integer

public static void main(String[] args) throws FileNotFoundException {

    Scanner sc = new Scanner(System.in);
      while(true){ //Runs until it is specified to break

        System.out.println("Enter filename");
        String fileName = sc.nextLine();

        if(fileName != null && !fileName.isEmpty()){ 
          processFile(fileName);
        }else{

        }
      }
    }

private static void processFile(String fileName) throws FileNotFoundException {
    String hteam;
    String ateam;
    int hscore;
    int ascore;
    int totgoals = 0;

    Scanner s = new Scanner(new BufferedReader(
            new FileReader(fileName))).useDelimiter("\\s*:\\s*|\\s*\\n\\s*");



    while (s.hasNext()) {
        String line = s.nextLine();
        String[] words = line.split("\\s*:\\s*");
        //splits the file at colons

        if(verifyFormat(words)) {
            hteam = words[0];       // read the home team
            ateam = words[1];       // read the away team
            hscore = Integer.parseInt(words[2]);       //read the home team score
            totgoals = totgoals + hscore;
            ascore = Integer.parseInt(words[3]);       //read the away team score
            totgoals = totgoals + ascore;
            validresults = validresults + 1;

            System.out.println(hteam + " " +  "[" + hscore + "]" +  " " + "|" + " " + ateam + " " + "[" + ascore + "]");   
            //output the data from the file in the format requested

        }
        else{
            invalidresults = invalidresults + 1;
        }
    }
System.out.println("Total number of goals scored was " + totgoals);
//displays the the total number of goals
System.out.println("Valid number of games is " + validresults);
System.out.println("Invalid number of games is " + invalidresults);

    System.out.println("EOF");
}
}

3 个答案:

答案 0 :(得分:2)

您可以尝试通过执行以下操作来确定文件是否存在:

File file = new File(fileName);
if(file.exists()) {
    processFile(fileName)
} 

答案 1 :(得分:1)

这是解决方案

public static void main(String[] args) throws FileNotFoundException {

  Scanner sc = new Scanner(System.in);
  while(true){ //Runs until it is specified to break

    System.out.println("Enter filename");
    String fileName = sc.nextLine();
    File file = new File(fileName);
    if(!file.exists()) {
      continue;
    }

    processFile(fileName);

  }
}

答案 2 :(得分:0)

使用此代码:

String fileName;
File file;

for(;;) {
    /* read file name */
    System.out.print("enter file name: ");
    fileName = bufferedReader.readLine();
    file = new File(fileName);

    /* check path */
    if (!file.exists())
        System.out.println("file doesn't exist");
    else if(!file.isFile())
        System.out.println("file isn't a regular file");
    else if (...)
        ...
    else
        break;
}

如果您想从键盘读取文件名,bufferedReaderBufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

您可以检查文件是否存在exists(),是常规文件isFile(),是目录isDirectory(),可以阅读carRead(),写canWrite(),执行canExecute(),等等..