从文件中读取并在Java中拆分数据

时间:2013-02-02 02:28:26

标签: java data-structures split fileinputstream

我正在尝试从.txt文件中读取数据。格式如下:

 ABC, John, 123
 DEF, Mark, 456
 GHI, Mary, 789

我试图摆脱逗号并将数据放入数组或结构(最有可能的结构)。

这是我用来提取每个项目的代码:

package prerequisiteChecker;

import java.util.*;
import java.io.*;

public class TestUnit {

    public static void main(String[]args){      
        try {
            FileInputStream fstream = new FileInputStream("courses.txt");
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;

            while ((strLine = br.readLine()) != null) {
                String[] splitOut = strLine.split(", ");
                for (String token : splitOut)
                    System.out.println(token);
            }
            in.close();
        } catch (Exception e){
            System.err.println("Error: " + e.getMessage());
        }
    }

} 

有一次,我在“while”循环中有一个打印行,看看是否会分割这些项目。他们是。现在我对下一步做什么感到茫然。我正在尝试将每个分组放入一个结构中。例如:ID - ABC。名字 - 约翰。房间 - 123。

我在家里有几本关于Java的书,并尝试环顾网络。那里有很多东西,似乎没有一个能让我朝着正确的方向前进。

感谢。

迈克尔

3 个答案:

答案 0 :(得分:0)

创建一个看起来像这样的类:

class structure {
    public String data1;
    public String data2;
    public String data3;
}

这将形成您的基本数据结构,您可以使用它来保存您在问题中提到的数据类型。现在,您可能希望遵循适当的面向对象的方法,例如将所有字段声明为私有,以及写入getter和setter。你可以在这里找到更多... http://java.dzone.com/articles/getter-setter-use-or-not-use-0

现在,在while循环之外,创建一个这样的ArrayList:ArrayList<structure> list = new ArrayList<structure>();这将用于保存您将要解析的所有不同数据行。

现在,在你的while循环中执行以下操作:

structure item = new structure();//create a new instance for each row in the text file.
item.data1 = splitOut[0];
item.data2 = splitOut[1];
item.data3 = splitOut[2];
list.add(item);

这将基本上获取您在每一行中解析的数据,通过为每个被解析的新行创建一个新实例来声明您声明的数据结构。最后,使用代码中的list.add(item)在ArrayList中插入该数据项,如上所示。

答案 1 :(得分:0)

我会创建一个很好的结构来存储你的信息。我不确定您是否想要访问数据,但这是一个很好的例子。我会放弃你之前放的东西。请注意,我只是将变量公之于众,因为它们是最终的。一旦你完成课程,他们就无法改变。如果您希望课程可变,请创建getter和setter并将实例变量更改为private。之后,您可以使用该列表来检索您想要的任何课程。

package prerequisiteChecker;

import java.util.*;
import java.io.*;

public class TestUnit {

    public static void main(String[] args) {
        try {
            FileInputStream fstream = new FileInputStream("courses.txt");
                    // use DataInputStream to read binary NOT text
            // DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
            String strLine;
            List<Course> courses = new LinkedList<Course>();
            while ((strLine = br.readLine()) != null) {
                String[] splitOut = strLine.split(", ");
                if (splitOut.length == 3) {
                    courses.add(new Course(splitOut[0], splitOut[1],
                            splitOut[2]));
                } else {
                    System.out.println("Invalid class: " + strLine);
                }
            }
            in.close();
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
    }

    public static class Course {
        public final String _id;
        public final String _name;
        public final String _room;

        public Course(String id, String name, String room) {
            _id = id;
            _name = name;
            _room = room;
        }

    }
} 

答案 2 :(得分:0)

public class File_ReaderWriter {
    private static class Structure{
        public String data;
    }

    public static void main(String[] args) throws IOException{

        String allDataString;
        FileInputStream  fileReader = new FileInputStream ("read_data_file.txt");
        DataInputStream in = new DataInputStream(fileReader);  
        BufferedReader bufferReader = new BufferedReader(new InputStreamReader(in));
        String[] arrayString = {"ID - ", " NAME - ", " ROOM - "};
        int recordNumber = 0;

        Structure[] structure = new Structure[10];

        for (int i = 0; i < 10; i++)
            structure[i] = new Structure();

        while((allDataString = bufferReader.readLine()) != null){
            String[] splitOut = allDataString.split(", ");
            structure[recordNumber].data = "";
            for (int i = 0; i < arrayString.length; i++){
                structure[recordNumber].data += arrayString[i] + splitOut[i];
            }
            recordNumber++;
        }

        bufferReader.close();

        for (int i = 0; i < recordNumber; i++){
                System.out.println(structure[i].data);

        }
    }


}

我修改了你给定的代码。有用。尝试一下,如果有任何疑问,请询问。