他们是完全相同的方法,但一个工作,另一个不工作

时间:2012-11-28 05:58:57

标签: java methods io

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工作正常。 textReader和textChanger完全一样!但textReader工作正常,textChanger没有!为什么?我甚至为每种方法重命名了扫描仪。看来Text.txt只能读一次??

1 个答案:

答案 0 :(得分:10)

问题是您的程序在textReader中无声地崩溃,而textChanger根本没有被调用。而不是:

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

你应该用这个:

while(input.hasNextLine()){
    System.out.println(input.nextLine());
}
如果没有更多输入,

Scanner.nextLine()将不会返回null;它会抛出一个NoSuchElementException

一般情况下,不要默默地捕获异常。至少致电printStackTrace()或记录问题!