如何从文本文件中读取数据并将其中的一些数据保存到数组中

时间:2012-01-16 08:48:00

标签: java string split

我的计算机中有一个文本文件,我正在阅读我的java程序,我想建立一些标准。这是我的记事本文件:

   #Students
   #studentId   studentkey  yearLevel   studentName token   
   358314           432731243   12          Adrian      Afg56       
   358297           432730131   12          Armstrong   YUY89       
   358341           432737489   12          Atkins      JK671   

        #Teachers
        #teacherId  teacherkey    yearLevel teacherName token   
        358314          432731243   12          Adrian      N7ACD       
        358297          432730131   12          Armstrong   EY2C        
        358341          432737489   12          Atkins      F4NGH

当我从这个记事本文件中读取时,我得到的是我应用程序中的确切数据 但我想只读取学生内部的标记列,并将它们放入我的数组中 studentTokens。这是代码

public static void main(String[] args) {
    ArrayList<String > studentTokens = new ArrayList<String>();

    try{
        // Open the file that is the first 
        // command line parameter
        FileInputStream fstream = new  FileInputStream("c:/work/data1.txt");

        // Get the object of DataInputStream
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String strLine;

        //Read File Line By Line
        while ((strLine = br.readLine()) != null)   {
            // Print the content on the console
            System.out.println (strLine);
        }

        //Close the input stream
        in.close();
    }catch (Exception e){//Catch exception if any
        System.err.println("Error: " + e.getMessage());
    }
}

5 个答案:

答案 0 :(得分:4)

简短提示:

private static Integer STUDENT_ID_COLUMN = 0;
private static Integer STUDENT_KEY_COLUMN = 1;
private static Integer YEAR_LEVEL_COLUMN = 2;
private static Integer STUDENT_NAME_COLUMN = 3;
private static Integer TOKEN_COLUMN = 4;

public static void main(String[] args) {

    ArrayList<String> studentTokens = new ArrayList<>();

    try (FileInputStream fstream = new FileInputStream("test.txt");
          InputStreamReader inputStreamReader = new InputStreamReader(fstream);
          BufferedReader br = new BufferedReader(inputStreamReader)) {

        String strLine;

        // Read File Line By Line
        while ((strLine = br.readLine()) != null) {

            strLine = strLine.trim();

            if ((strLine.length() != 0) && (strLine.charAt(0) != '#')) {
                String[] columns = strLine.split("\\s+");
                studentTokens.add(columns[TOKEN_COLUMN]);
            }

        }
    }
    catch (Exception e) {// Catch exception if any
        System.err.println("Error: " + e.getMessage());
        return;
    }

    for (String s : studentTokens) {
        System.out.println(s);
    }
}

以上代码不是完整的解决方案。它提取所有代币(适用于学生和教师)。我希望你能从那里开始让它适用于学生代币...

答案 1 :(得分:1)

不要在java.io中做任何事情,你必须考虑转移到java.nio,它现在有一些非常好的API可以解决。

这是一个小代码,可以为您提供所需的结果。

import java.io.BufferedReader;

import java.nio.charset.Charset;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import java.util.ArrayList;
import java.util.List;

public class StudentToken
{
    public static void main(String[] args) throws Exception
    {       
        List<String> studenttoken = new ArrayList<String>();
        Path sourcePath = Paths.get(args[0]);
        Charset charset = Charset.forName("US-ASCII");
        BufferedReader reader = Files.newBufferedReader(sourcePath, charset);
        int width = 0;
        int height = 0;

        String line = null;     
        line = reader.readLine();
        while (!((line = reader.readLine()).trim()).equals("#Teachers"))
        {       
            line = line.trim();
            if (width == 0)
            {
                String[] str = line.split("\\s+");
                width = str.length;
            }           
            if (line.length() > 0)  
            height++;
        }
        reader.close();

        BufferedReader reader1 = Files.newBufferedReader(sourcePath, charset);
        reader1.readLine();
        for (int i = 0; i < height; i++)
        {
            if(!((line = reader1.readLine()).trim()).equals("#Teachers"))
            {
                line = line.trim();
                String[] str = line.split("\\s+");
                for (int j = 0; j < width; j++)
                {
                              // this condition will add only those elements which fall under token column.
                    if (j == (height) && i != 0) 
                        studenttoken.add(str[j]);                   
                }
            }
        }
        reader1.close();
        System.out.println(studenttoken);
    }
}

以下是测试运行的输出:

enter image description here

希望这可能会有所帮助。 问候。

答案 2 :(得分:0)

您可以逐行阅读文件并使用 String.split (“\ s +”)。

答案 3 :(得分:0)

查看String.split方法,它将帮助您拆分空间上的每一行。拆分后,可以检索令牌列的值。最后,请致电ArrayList.add将其添加到您的列表中。

答案 4 :(得分:0)

您可以简单地打印线条。 我相信可以有两种方式 由于您的标记元素是第五个元素,您可以拆分字符串并直接使用第5个元素

String splitString = strLine.split(“\ t”); String tokenvalue = splitString [4];

或维护为csv文件以便于操作