文本文件操作:从文本文件中获取数据,并使用从原始文件中获取的数据编写新的文本文件

时间:2018-12-13 20:40:11

标签: java sorting arraylist read-write

我正在编写一个程序来处理文本文件中的某些数据。我应该从包含比这4个信息更多的信息的文件中获取州ID,人口,出勤率和贫困状况,并将其写入新的文本文件中。然后使用这个新的文本文件进行一些数学运算。 这是原始的文本文件结构:
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,字符串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 :(得分:0)

第28、30、32行:文件中的字段是否真的由制表符和一个制表符分隔?看起来不像。我的猜测是它正在使用空格,而您的拆分产生的数组正好是一列,即整行。假设您有扫描仪实例,则可能打算使用该实例来通过.nextInt().next()方法读取字段。

第37行.add()方法返回一个布尔值,您正尝试将其写入流中。您可能打算写outfile.write(pd.toString())

第40行:您可能是说System.out.println(pd.toString()),实际上拥有的PopulationDataManipulation.toString()无效,因为它是一个实例方法,并且您的主体是静态的。