在java中,如何从文件中读取数据并创建数组集合?

时间:2013-01-31 11:37:59

标签: java arrays junit

我正在尝试运行Junit参数化测试。以下是Junit建议将数据添加到数组集合的方法。

Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } };  
return Arrays.asList(data);  

然而,这需要用户在代码中添加数据。我想从文件中读取数据(大约300行)并将其转换为数组集合。我怎样才能做到这一点 ?

以下是代码:

import static org.junit.Assert.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;



@RunWith(value=Parameterized.class)
public class UrlParameterizedTest {

    private String url;
    public static ArrayList<String>dataArray=new ArrayList<String>();
    static File directory = new File(".");
    public static String fileToRead;

    public UrlParameterizedTest(String url){
        this.url=url;
    }
    @Parameters
    public static Collection<Object[]> data() throws Exception {

        try {
            fileToRead=directory.getCanonicalPath()+"\\Data\\LinkChecker.csv";
            loadDataFile(fileToRead);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

    Object[][]data=new Object[dataArray.size()][];
      *******   //convert dataArray to data here.************
        return Arrays.asList(data);

    }

    @Test
    public void testURLs() {
        System.out.println("Parameterized Number is "+url);
    }

    public static void loadDataFile(String dataFile) throws Exception {
        dataArray.clear();
        //if data_file is absolute, use this
        try
        {
            // Open an input stream
            // Read a line of text
            String line="";
            BufferedReader br=new BufferedReader(new FileReader(dataFile));
            while((line=br.readLine())!=null) {
                dataArray.add(line);
            }
            br.close();
            System.out.println("The data file length is "+ dataArray.size());
        }

        catch (IOException e)
        {
            e.printStackTrace();
            System.out.println ("Unable to read from file");
        }
    }
}

3 个答案:

答案 0 :(得分:2)

使用Apache Commons FileUtils.readFileToString将文件读取为字符串。然后,您需要将文件解析为数组集合。我们无法帮助您解析文件,我们也不知道内容。

FileUtils.readFileToString

答案 1 :(得分:0)

将您的数据放在一个文件中,一个放在另一个文件中。使用扫描仪将它们作为字符串读取,然后将它们转换为数字(我假设它们应该是浮点数)。 像这样:

ArrayList<Float> numbers = new ArrayList<Float>();
Scanner scanner = new Scanner(file);
while(scanner.hasNextLine()) {
    String nextLine = scanner.nextLine();
    float value = Float.parseFloat(nextLine);
    numbers.add(value);
}
scanner.close();

答案 2 :(得分:0)

为了从文件中检索字符串,您可以使用类似以下代码的内容;然后你可以从你的ArrayList中检索数据并将它们放入你的数组中(使用Class ArrayList提供的“toArray()”方法)。

ArrayList<String> strings=new ArrayList<String >();
String filePath = path + "/" + fileName;

FileInputStream fin = null;
            try {
                fin = new FileInputStream(filePath);
            } catch (IOException e) {
                System.out.println (e.toString()); 
                System.out.println("File " + fileName + " not found.");
            }

            DataInputStream in = new DataInputStream(fin);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine = null;


            while ((strLine = br.readLine()) != null)   {

                strings.add(strLine);
            }

            in.close();