我如何更改此代码以使其询问我要加载的文件的位置?

时间:2014-12-30 14:08:23

标签: 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 {

        String hteam;
        String ateam;
        int hscore;
        int ascore;
        int totgoals = 0;

        Scanner s = new Scanner(new BufferedReader(
                new FileReader("fbscores.txt"))).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");
    }
}

1 个答案:

答案 0 :(得分:1)

一种方法是使用主循环来询问文件名,并在没有给出输入时退出程序执行。

因此,我会将您main方法的大多数代码重构为另一个函数,例如: processFile(String fileName)

然后您的main仅处理用户输入

public static void main(String args[]){
  Scanner sc = new Scanner(System.in);
  while(true){ //keep running till we break

    System.out.println("Enter filename or return blank line to quit");
    String fileName = sc.nextLine();

    if(fileName != null && !fileName.isEmpty()){ 
      processFile(fileName)
    }else{
      break; //no user input => exit
    }
  }
  System.out.println("bye");
}

private static processFile(String fileName){
    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()) {
      … //rest of your original code
}