扫描程序仅适用于多个Java类中的一个

时间:2015-03-28 23:34:05

标签: java class java.util.scanner

我有一个程序,目的是分析用户在提示时输入文本文件的完整路径所选择的文本文件。

我已设法将扫描程序分成多个类,但它不能同时用于每个方法。例如,我有一个类将打印文件中的数字量,另一个类将打印文件中的单词数。但是,只有运行的第一个方法才有效,另一个方法将显示0正在搜索的类(数字,行,单词等),即使真值实际上不是0。

我真的不知道为什么会发生这种情况,我已经将主要类附加了另外两个类来显示一个明确的例子:

主类:

package cw;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Scanner;
import javax.swing.JFileChooser;
import java.io.IOException;

public class TextAnalyser {
public static Scanner reader;
    public static void main(String[] args) throws IOException {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter a filename");
        String filename = in.nextLine();
        File InputFile = new File (filename);
        reader = new Scanner (InputFile);


        LineCounter Lineobject = new LineCounter();
        WordCounter Wordobject = new WordCounter();


        Lineobject.TotalLines();
        Wordobject.TotalWords();

    }

}

计算行数的类:

package cw;

import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Scanner;
import javax.swing.JFileChooser;
import java.io.IOException;

public class LineCounter {


    public static void TotalLines() throws IOException {
       // Scanner sc = new Scanner(TextAnalyser.class.getResourceAsStream("test.txt"));
                      Scanner sc = TextAnalyser.reader;

        PrintWriter out = new PrintWriter(new FileWriter("C:\\Users\\Sam\\Desktop\\Report.txt", true));
        int linetotal = 0;
        while (sc.hasNextLine()) {
            sc.nextLine();
            linetotal++;
        }
         out.println("The total number of lines in the file = " + linetotal);

             out.flush();

            out.close();
         System.out.println("The total number of lines in the file = " + linetotal);
    }
}

计算单词的类:

package cw;

import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Scanner;
import javax.swing.JFileChooser;
import java.io.IOException;

public class WordCounter {
                     public static  Scanner sc = TextAnalyser.reader;

    public static void TotalWords() throws IOException{
        //Scanner sc = new Scanner(TextAnalyser.class.getResourceAsStream("test.txt"));
        PrintWriter out = new PrintWriter(new FileWriter("C:\\Users\\Sam\\Desktop\\Report.txt", true));
        int wordtotal = 0;

  while (sc.hasNext()){
     sc.next();
      wordtotal++;
  }
    out.println("The total number of words in the file = " + wordtotal);
    out.flush();

            out.close();

  System.out.println("The total number of words in the file = " + wordtotal);
}
}

出于某种原因,一个人只会一次工作,总会说有0,如果有人能向我解释为什么会发生这种情况以及如何解决它,那真的会有所帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

reader = new Scanner (InputFile);包含对扫描程序对象的引用,当您在将public static Scanner sc = TextAnalyser.reader;的引用复制到reader的两种方法中使用sc时,所有这些都是同一个对象。为什么有2个变量引用所有相同的对象,其中一个用相同的值重新定义两次?

这里的问题是扫描程序到达文件的末尾,当你再次调用它时(它是同一个对象)它没有什么可读的,所以你应该创建另一个扫描程序对象(也许你就是这样)试图做什么?)。更好的解决方案是读取文件一次并将内容存储在某种数据结构中。