通过扫描仪将.txt重写为数组

时间:2013-04-15 16:39:44

标签: java arrays

class Materials implements Runnable {
    String path;

    public Materials(String path) {
        this.path = path;
    }

    public int checkSize() throws FileNotFoundException {
        Scanner sc = new Scanner(new File(path));
        int size = 0;
            while(sc.hasNextLine()) size++;
        sc.close();
        return size;
    }

    public void run() {
    try {
        Scanner sc = new Scanner (new File(path));
        int[][] materialsTab = new int[1][checkSize()];
        int x=0, count=0;
        while(sc.hasNext()){
            count++;

            materialsTab[x][0] = sc.nextInt();
            materialsTab[x][1] = sc.nextInt();
            x++;
            System.out.println("Im working!");

            if(count%200 == 0) System.out.println("Creat " + count + " objects");
    }
    sc.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }


    }
}

我的问题是我必须通过线程将.txt文件重写成一个数组,然后是下一个线程,但是我被困在任务的第一部分。

public int checkSize()负责计算数组的大小,因为文本文件大约有10 000行。整体看起来完全像这样:

[商品ID] [重量]

所以我决定计算行数并创建一个这样的表,一个我保留ID的地方,然后是重量,因为稍后我将不得不计算一些东西。

此外,每200条记录必须出现在邮件中。问题是,在开始这部分之后......没有任何反应。

2 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,请尝试将Runnable更改为Callable<int[]>,将public void run()更改为public int[] call()并在结尾处添加return materialsTab;

答案 1 :(得分:0)

而不是

int[][] materialsTab ...

考虑使用大致类似的东西:

List<Point> materialsTab = new ArrayList<Point>();

Point mat = new Point();
mat.x = sc.nextInt();
if (!sc.hasNext())
    break;
mat.y = sc.nextInt();
materialsTab.add(mat);