从txt文件中读取并将行的值分配给类字段

时间:2015-09-09 08:21:16

标签: java file-io arraylist collections file-handling

如果有人可以提供帮助, 我有一个问题是将文本文件中的值分配给类字段。 我创建了一个名为process的类,它有一个像

这样的字段
private String  agent;
private String request_type;
private String class_type;
private String num_of_seats;
private String  arrivaltime;

我的动机是将文件中的1个块分配给代理,用空格分隔另一个块来请求类型等等...... 说Agent3 R F 10 1这里Agent3将被分配给代理,R将分配给request_type F到class_type,10到num_of_seats,1到到达时间

我正在使用arraylist来保存输入文件(不是必须的,我知道这只是那个y)和另一个arraylist来保存我的类的对象。我使用substring方法手动分配值是否有任何方式而不是那样我可以简单地采取空间隔离的块并完成我的工作。

输入文件(input.txt is)

Agent1 R F 2 0
Agent3 R F 10 1
Agent1 C F 1 4
Agent2 C B 2 1
Agent2 R B 10 0

............................................... .................................

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author Navdeep
 *
 */
class Process
{
    private String  agent;
    private String request_type;
    private String class_type;
    private String num_of_seats;
    private String  arrivaltime;
    public Process()
    {
        setProcess("0", null, null, "0", "0");
    }

    public Process(String a, String b,String c,String d,String e)
    {

        setProcess(a,b,c,d,e);
    }
    public void  setProcess(String a, String b,String c,String d,String e)
    {
        setAgent(a);
        setRequest_type(b);
        setClass_type(c);
        setNum_of_seats(d);
        setArrivaltime(e);  
    }
    public void setAgent(String a){
        agent = a;

    }
    public void setRequest_type(String b){
        request_type = b;
    }
    public void setClass_type(String c)
    {
        class_type = c;
    }
    public void setNum_of_seats(String d) {
    num_of_seats = d;
    }
    public void setArrivaltime(String e)
    {
        arrivaltime=e;
    }
    public String getAgent(){
        return agent;

    }
    public String getRequest_type(){
        return request_type ;
    }
    public String  getClass_type()
    {
        return class_type; 
    }
    public String  getNum_of_seats() {
    return num_of_seats ;
    }
    public String  getArrivaltime()
    {
        return arrivaltime;
    }

    @Override
    public String toString() {
        return String.format("%s,%s,%s,%s,%s",getAgent(),getRequest_type(),getClass_type(),getNum_of_seats(),getArrivaltime());
    }

}

public class main
{
    public static void main(String[] args) throws FileNotFoundException 
    {
        File temp = new File(args[0]);
        Scanner sc = new Scanner(temp);
        ArrayList<String> input = new ArrayList<String>();

        while(sc.hasNext())
        {
         input.add(sc.nextLine());

        }
        List<Process> mylist = new ArrayList<Process>();    
        for (int i= 0; i <input.size();i++)
        {
        Process processobject = new Process();
        processobject.setAgent(input.get(i).substring(0, 6));

        processobject.setRequest_type(input.get(i).substring(7,8));
        processobject.setClass_type(input.get(i).substring(9,10));
        if(input.get(i).length() == 15)
        {
            processobject.setNum_of_seats(input.get(i).substring(11,13));
            processobject.setArrivaltime(input.get(i).substring(14,15));    
        }
        if(input.get(i).length() == 14)
        {
        processobject.setNum_of_seats(input.get(i).substring(11,12));
        processobject.setArrivaltime(input.get(i).substring(13,14));
        }
        mylist.add(processobject); // fill arraylist with objects of my class
        }
        System.out.println("array list of the input from the file" + input);
        System.out.println("\n \nobjects in my list"+ mylist);
    }
}

我的项目的总体动机是根据字段优先级对对象进行排序。

2 个答案:

答案 0 :(得分:1)

试试这个:

        ClassLoader classLoader = getClass().getClassLoader();
        File file = new File(classLoader.getResource(configFileName).getFile());
        input = new FileInputStream(someFilePath);
        prop.load(input);
        String someString=prop.getProperty("someString");
        int someintValue=new Integer(prop.getProperty("someintValue"));

答案 1 :(得分:1)

如果您的目标是创建Process类实例,那么您可以使用以下代码:

while(sc.hasNext())
{
  String line = sc.nextLine();
  String elements[] = line.split(" ");
  Process processobject = new Process();
  processobject.setProcess(elements[0],elements[1],elements[2],elements[3],elements[4]);
}

您可以通过使用setProcess引用直接访问类属性来改进this方法。您也可以将相同的参数传递给Process类构造函数,然后您将不需要setProcess方法。请检查以下代码。

public Process(String agent, String request_type, String class_type, String num_of_seats, String arrivaltime) {
  this.agent = agent;
  this.request_type = request_type;
  this.class_type = class_type;
  this.num_of_seats = num_of_seats;
  this.arrivaltime = arrivaltime;
}