Как передать переменную из класса, который использует Scanner в основной класс? - PullRequest
1 голос
/ 11 декабря 2011

как мне получить прочитанный текстовый файл в основной класс?

//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 и обучающих программ по Sun), это было бы здорово. спасибо

Ответы [ 2 ]

0 голосов
/ 11 декабря 2011

Во-первых, вы, вероятно, хотите следовать стандартным соглашениям об именах Java - используйте public class MainClass вместо mainClass.

Во-вторых, для ваших методов public имеет определенныйцель.См. здесь и здесь .Обычно вы хотите пометить методы как public только по мере необходимости (на жаргоне это называется encapsulation ).

По вашему вопросу - в классе Load вы можете добавитьвесь текст из файла в String и добавьте метод public getter в Load, который будет возвращать его при вызове.

Добавьте это в начале Load:

public class Load {
    private String fileText;
    // ... rest of class

И добавить этот метод получения в класс 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()

0 голосов
/ 11 декабря 2011

Код был TL; DR

Если вы хотите получить все данные из файла .txt класса load, то вам нужно написать метод в 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);
}
...