Java:文件读取问题

时间:2010-02-23 04:06:22

标签: java filereader

你会怎么写这段代码?

这个特殊的问题是关于一个迷宫游戏,其中包括探险者(你),怪物(触摸将杀死你)和宝藏的占领者。游戏使用这些占用者所在的方块对象。我想要做的具体事情是文件读取,它可以导出迷宫的当前配置或将它们作为txt文件导入。

规格: 首先读取迷宫的行和列,以创建适当大小的Square [] []。然后构建并阅读所有Squares / Occupants。

对于Squares,迷宫将首先确定该行以“Square”开头。然后它将读取Square的行和列,并使用该信息构造Square对象。最后,它将扫描器的其余部分传递给Square的toObject方法,以便它可以初始化自己。

对于所有其他占用者,迷宫将确定它是什么类型的占用者并使用仅占用迷宫的构造函数构造适当的对象。它不会从Scanner读取行或col,而只是将Scanner传递给新创建的对象的toObject方法。

这是我到目前为止可能出错的代码:

    public void readMazeFromFile(String fileName) throws IOException, FileNotFoundException, MazeReadException
   {
        Scanner fileSc = new Scanner(new File(fileName));
        String line = fileSc.nextLine(); //whats on the line, will be overwritten
        Scanner lineSc = new Scanner(line);
        String temp;
        lineSc.useDelimiter(",");
        int lineNum = 1; //every time you scan a line out, do lineNum++
        int r1, r2, r3, r4, c1, c2, c3, c4;

        rows = fileSc.nextInt();
        cols = fileSc.nextInt();
        Square hi = new Square(rows, cols);
        line = fileSc.nextLine();
        while ( line != null)
        {
            line = lineSc.nextLine();
            lineSc = new Scanner(line);

            if( lineSc.equals("Square"))
            {
                r1 = lineSc.nextInt();
                c1 = lineSc.nextInt(); 
                hi.toObject(lineSc);
            }
            if (lineSc.equals("Explorer"))
            {

                explorer.toObject(lineSc);
            }
            if (lineSc.equals("Treasure"))
            {
                Treasure.toObject(lineSc);
            }


            lineNum++;
        }

以下是示例输出:

5,5
Square,0,0,true,false,false,true,true,true
Square,0,1,true,false,true,false,true,true
Square,0,2,true,false,true,false,false,false
Square,0,3,true,false,false,false,false,false
Square,0,4,true,true,false,false,false,false
Square,1,0,false,false,true,true,true,true
Square,1,1,true,false,true,false,false,false
Square,1,2,true,true,false,false,false,false
Square,1,3,false,true,false,true,false,false
Square,1,4,false,true,false,true,false,false
Square,2,0,true,false,false,true,false,false
Square,2,1,true,false,true,false,false,false
Square,2,2,false,true,false,false,false,false
Square,2,3,false,true,false,true,false,false
Square,2,4,false,true,false,true,false,false
Square,3,0,false,true,false,true,false,false
Square,3,1,true,false,false,true,false,false
Square,3,2,false,true,false,false,false,false
Square,3,3,false,true,true,true,false,false
Square,3,4,false,true,false,true,false,false
Square,4,0,false,true,true,true,false,false
Square,4,1,false,true,true,true,false,false
Square,4,2,false,false,true,true,false,false
Square,4,3,true,false,true,false,false,false
Square,4,4,false,true,true,false,false,false
Explorer,0,0,Scary Name
Treasure,4,4,true
Treasure,2,2,false
Monster,4,4
Monster,3,3

你会为这一部分写些什么?

2 个答案:

答案 0 :(得分:1)

这是一个你可以开始的骨架。你真的不需要Scanner这里的任何东西;它可以执行扫描输入和进行转换等所需的所有内容。您希望使用其next()nextInt()nextBoolean()nextLine()方法。

    Scanner in = new Scanner(new File(filename));
    in.useDelimiter("\\s+|,");

    int rows = in.nextInt();
    int cols = in.nextInt();
    // construct the array

    while (in.hasNext()) {
        String type = in.next();
        int r = in.nextInt();
        int c = in.nextInt();
        // read more depending on type
    }

答案 1 :(得分:0)

在文件上使用FileReader,然后将StreamTokenizer附加到该文件,效率更高:)

http://java.sun.com/j2se/1.4.2/docs/api/java/io/StreamTokenizer.html

http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileReader.html