如何将变量从使用Scanner的类传递到主类?

时间:2011-12-11 03:57:59

标签: java methods java.util.scanner

如何将读取的txt文件放入主类?

//main class
public class mainClass {

public static void main(String[]args) {
    load method = new load("Monster");
}
}





//scanner class

public class load {

  public static void loader(String... aArgs) throws FileNotFoundException {
    load parser = new load("resources/monsters/human/humanSerf.txt");
    parser.processLineByLine();
    log("Done.");
  }

  public load(String aFileName){
    fFile = new File(aFileName);  
  }

  public final void processLineByLine() throws FileNotFoundException {
    //Note that FileReader is used, not File, since File is not Closeable
    Scanner scanner = new Scanner(new FileReader(fFile));
    try {
      //first use a Scanner to get each line
      while ( scanner.hasNextLine() ){
        processLine( scanner.nextLine() );
      }
    }
    finally {

      scanner.close();
    }
  }

  public void processLine(String aLine){
    //use a second Scanner to parse the content of each line 
    Scanner scanner = new Scanner(aLine);
    scanner.useDelimiter("=");
    if ( scanner.hasNext() ){
      String name = scanner.next();
      String value = scanner.next();
      log("Stat is : " + quote(name.trim()) + ", and the value is : " + quote(value.trim()) );
    }
    else {
      log("Empty or invalid line. Unable to process.");
    }
  }

  public final File fFile;

  public static void log(Object aObject){
    System.out.println(String.valueOf(aObject));
  }

  public String quote(String aText){
    String QUOTE = "'";
    return QUOTE + aText + QUOTE;
  }
} 

如果我想要文件中的文本,我可以从主类调用哪种方法以及从该方法返回哪些变量。如果有人有一个网站,可以帮助我学习扫描仪(得到这个互联网的源代码,只有从JavaPractises和太阳教程中理解它),这将是伟大的。感谢

2 个答案:

答案 0 :(得分:0)

代码是TL; DR

如果您想从load类的.txt文件中获取所有数据,那么您需要在load中编写一个方法来获取这些行。像这样的东西会起作用:

public String[] getFileAsArray() {
  ArrayList<String> lines = new ArrayList<String>();
  Scanner in = new Scanner(fFile);

  while(in.hasNextLine())
    lines.add(in.nextLine();

  String[] retArr = new String[lines.size()];

  return lines.toArray(retArr);
}

答案 1 :(得分:0)

首先,您可能希望遵循标准Java naming conventions - 使用public class MainClass代替mainClass

其次,对于您的方法,public有特定目的。请参阅herehere。您通常只希望在必要时将方法标记为public(用行话,这称为封装)。

对于您的问题 - 在Load课程中,您可以将文件中的所有文字附加到String,然后添加public getter 方法在Load中,它将在被调用时返回。

Load

的开头添加此内容
public class Load {
    private String fileText;
    // ... rest of class

并将此getter方法添加到Load类。是的,您可以简单地将fileText标记为public,但这会违背面向对象编程的目的。

public getFileText(String aFileName){
    return fileText;
}

最后,对log使用这种新方法。请注意,无需使用Object

private static void log(String line) {
    System.out.println(line);
    fileText += aObject;
}

现在,您可以通过调用method.getFileText()

将读取文件放入主类中