Работа с текстовым файлом: взять данные из текстового файла и написать новый текстовый файл с данными, взятыми из исходного файла - PullRequest
0 голосов
/ 13 декабря 2018

Я пишу программу для манипулирования некоторыми данными в текстовом файле.Я должен взять идентификатор штата, население и посещаемость школы, а также бедность из файла, который содержит больше информации, чем эти 4, и записать их в новый текстовый файл.Затем используйте этот новый текстовый файл, чтобы сделать некоторые математику.Это исходная структура текстового файла:
This is the original text file structure Я столкнулся с ошибками в своем коде и был бы признателен за помощь.В частности, ошибки являются индексом за пределами границ, и нестатический метод не может быть ссылкой из этого контекста.

Класс для определения данных для извлечения:
Class to define data for extraction Класс, гдефактическое извлечение выполнено:
Class where the actual extraction is done public PopulationData (String stateId, String totPopulation, String schoolGoingPopuplation, String povertPopulation) {this.stateId = stateId;this.totPopulation = totPopulation;this.schoolGoingPopuplation = schoolGoingPopuplation;this.povertPopulation = povertPopulation;}

  public String getState()
  {
     return stateId;
  }

  public String getPopulation()
  {
     return totPopulation;
  }

  public String getSchool()
  {
     return schoolGoingPopuplation;
  }

  public String getPoverty()
  {
     return povertPopulation;
  }

  public String toString()
  {
     return this.stateId + " " + this.totPopulation + " " + 
     this.schoolGoingPopuplation + " " + this.povertPopulation;
  }   

// это основной класс

         inFile = new InputStreamReader(new FileInputStream(inFileName));

        OutputStreamWriter outFile = new OutputStreamWriter(new FileOutputStream(outFileName));

        while(scanner.hasNext()) {

           String line = scanner.nextLine();

           String[] columns = line.split(" ");

           String sateId = columns[0];

           String totPopulation = columns[9]; 

           String schoolGoingPopuplation = columns[10]; //index out of bounds occured

           String povertPopulation = columns[11]; //index out of bounds occured

           PopulationData pd = new PopulationData(sateId, totPopulation, schoolGoingPopuplation, povertPopulation);
           data.add(pd);

           outFile.write(pd.toString()); 
        } 
        for(PopulationData pd : data){ 
           System.out.println(pd.toString()); 
        }       
     }
     catch(IOException except)
     {
        except.printStackTrace();
     }
  }

1 Ответ

0 голосов
/ 14 декабря 2018

Строка 28,30,32 : действительно ли поля в файле разделены символом табуляции и ровно одним символом табуляции?Не похоже на это.Я предполагаю, что он использует пробелы, а ваш разделитель создает массив ровно из одного столбца, который является всей строкой.Учитывая, что у вас есть экземпляр сканера, вы, вероятно, намеревались использовать его для чтения полей с помощью методов .nextInt() и .next().

Строка 37 : метод .add()возвращая логическое значение, которое вы пытаетесь записать в поток.Вы, вероятно, хотели написать outfile.write(pd.toString())?

Строка 40 : вы, вероятно, имеете в виду System.out.println(pd.toString()), то, что у вас есть, фактически PopulationDataManipulation.toString(), который не работает, потому что это метод экземпляра иваш главный статичен.

...