Работа с текстовым файлом: возьмите данные из текстового файла и напишите новый текстовый файл с данными, взятыми из исходного файла

Я пишу программу для управления некоторыми данными в текстовом файле. Я должен взять удостоверение личности штата, численность населения, посещаемость школы и бедность из файла, который содержит больше информации, чем эти 4, и записать их в новый текстовый файл. Затем используйте этот новый текстовый файл для выполнения некоторых математических расчетов. Это исходная структура текстового файла:
Работа с текстовым файлом: возьмите данные из текстового файла и напишите новый текстовый файл с данными, взятыми из исходного файла Я столкнулся с ошибками в своем коде и был бы признателен за помощь. Чтобы быть конкретным, ошибки являются индексом за пределами, и нестатический метод не может ссылаться на этот контекст.

Класс для определения данных для извлечения:
Работа с текстовым файлом: возьмите данные из текстового файла и напишите новый текстовый файл с данными, взятыми из исходного файла Класс, в котором происходит фактическое извлечение:
Работа с текстовым файлом: возьмите данные из текстового файла и напишите новый текстовый файл с данными, взятыми из исходного файла 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();
     }
  }

Попробуйте вместо скриншотов поставить код. Также индекс массива означает, что вы обращаетесь к индексу, который выходит за пределы вашего размера массива, а нестатический означает, что вы пытаетесь получить доступ к методам, поскольку они статичны, но это не так, поэтому вам понадобится экземпляр класса для доступа к ним.

shelholmes221 13.12.2018 22:01

Как лучше всего получить эту информацию по индексу и записать ее в файл?

villagedeveloper2019 14.12.2018 18:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
127
1

Ответы 1

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

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

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

Спасибо за вашу помощь. Проблема с писателем и печатью решена. Единственное, что я выясняю, это индексация. Что я пытаюсь сделать с этим, так это разбить каждую строку на массив, чтобы я мог записать только ту информацию, которую я хочу, в новый файл файла. Затем я воспользуюсь этим новым файлом для расчета процента.

villagedeveloper2019 14.12.2018 18:38

Разделение не работает, потому что вы пытаетесь разделить строку, разделенную пробелами, с помощью символа табуляции. «01 00180 Auburn School District» .split («\ t») создает массив из одного элемента [«01 00180 Auburn School District»]. Вы можете сделать это с помощью своего сканера, например: int col1 = scanner.nextInt (); int col2 = scanner.nextInt (); или вы можете использовать тот факт, что есть столбцы фиксированной ширины и захватить их по подстроке, например: String name = line.substring (10, 80) .trim (); или вы можете сопоставить все это с регулярным выражением ex Pattern.compile ("\\ d + \\ d + ..."), но imho split здесь неправильный подход.

Greg 14.12.2018 18:59

Большое спасибо Грегу за поддержку. Метод подстроки сработал.

villagedeveloper2019 16.12.2018 03:06

Другие вопросы по теме