They are exact same methods but one works and anot

2019-09-06 17:41发布

public class L20 {
public static void main(String[] args) throws IOException{
    Scanner input=new Scanner(System.in);

    System.out.println("Enter file name");
    String in=input.nextLine();
    try{
        textWriter(in);
        textReader(in);
        textChanger(in);

    }catch(Exception e){

    }

}

public static void textWriter(String path) throws IOException{
    String[] alphabet=    
 {"a","b","c","d","e","f","g","h","i","j","k","m","l","n","o","p","q","r","s","t","u","v","w","x","y","z"};
File file=new File(path);
Writer output=null;
    Random number=new Random();
    output=new BufferedWriter(new FileWriter(file));
    int lines=10+number.nextInt(11);
    for(int i=0;i<lines;i++){
    int it2=1+number.nextInt(9);
    int n1=number.nextInt(26);
    int n2=number.nextInt(26);
    int n3=number.nextInt(26);

    String t2=Integer.toString(it2);
    String t1=alphabet[n1]+alphabet[n2]+alphabet[n3];
    String text=t1+t2;
    output.write(text);
    ((BufferedWriter) output).newLine();
    }
    output.close();
    System.out.println("Your file has been written");
}

public static void textReader(String path) throws IOException{
    File file=new File(path);
    Scanner input;
    input=new Scanner(file);
    String line;
    while((line=input.nextLine())!=null){
        System.out.println(line);
    }
    input.close();
}

private static void textChanger(String path) throws IOException{
    File file=new File(path);
    Scanner input2;
    input2=new Scanner(file);
    String line;
    while((line=input2.nextLine())!=null){
        System.out.println(line);
    }
    input2.close();
}

}

textWriter works fine. textReader and textChanger are exactly the same! But textReader works fine and textChanger does not! WHy? I even have renamed the scanner for each method. It seems the Text.txt can only be read for once??

标签: java methods io
1条回答
We Are One
2楼-- · 2019-09-06 18:19

The problem is that your program is crashing silently in textReader and textChanger is not being called at all. Instead of this:

while((line=input.nextLine())!=null){
    System.out.println(line);
}

you should use this:

while(input.hasNextLine()){
    System.out.println(input.nextLine());
}

Scanner.nextLine() will not return null if there is no more input; it will throw a NoSuchElementException.

In general, don't silently catch exceptions. At least call printStackTrace() or log the problem!

查看更多
登录 后发表回答