首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取文件

读取文件
EN

Stack Overflow用户
提问于 2017-05-01 23:30:02
回答 1查看 45关注 0票数 0

我已经创建了一个游戏,屏幕上有狗和猫,狗和猫的房子。我有它的工作很好,并有一个方法,随机地将他们放在屏幕上,但我想让某人能够使用一个文本文件的坐标来放置他们在屏幕上。因此,我正在尝试创建一种方法来实现这一点。我有一个名为levels的文件夹,里面有两个记事本文件,一个叫level1,另一个叫level2。在第一个文件中,它看起来像这样。

代码语言:javascript
复制
DOG @ 79.0, 409.0
DOG @ 150.0, 320.0
CAT @ 73.0, 194.0
DOG_HOUSE @ 72.0, 158.0
CAT_HOUSE @ 51.0, 591.0

第二个文本文件包含类似的内容,但有一点不同。

代码语言:javascript
复制
DOG @ 79.0, 129.0
DOG @ 150.0, 245.0
DOG_HOUSE @ 93.0, 276.0
CAT_HOUSE @ 101.0, 532.0
DOG @ 91.0, 93.
CAT @ 123.0, 294.0

我创建这些对象的方式如下所示。基本上,我创建对象,然后将其添加到相应的数组中,因此,要在屏幕上显示对象,我只需更新每个数组。

代码语言:javascript
复制
 Dogs dog = new Dogs(xvalue,yvalue);
 Cats cat = new Cats(xvalue,yvalue);
 Dog_House doghouse = new Dog_House(xvalue,yvalue);
 Cat_House cathouse = new Cat_House(xvalue,yvalue);

基本上,它们只是对象的名称,然后是他们想要它在屏幕上的位置的坐标。因此,我需要读取文件,确定它是哪个对象,并使用给定的坐标创建一个新的对象。我猜在这个方法中,首先将每一行存储到一个全新的数组中是最容易的。然后我应该如何做一些if语句,以便当扫描器看到CAT时,它将使用@符号另一侧的坐标创建对象。我想我可以使用一些关于我需要在while语句中输入什么的指导来正确地读取行,然后使用该行中的信息来创建一个object.This,这就是我到目前为止所知道的。谢谢。

代码语言:javascript
复制
private boolean loadCustomLevel(String levelFilename) 
{ 

    File inFile = new File(levelFilename);

    Scanner input = null;
    try{
        input = new Scanner (inFile);

        while(input.hasNextLine()){

            }
    }
    catch(FileNotFoundException e){
        System.err.println("Error: unable to open file: " + inFile);

    }

    return false;
}
EN

回答 1

Stack Overflow用户

发布于 2017-05-02 01:48:05

您应该将读取文件的方式更改为:

代码语言:javascript
复制
String input = null;
BufferedReader br = null;

try {
    FileReader file = new FileReader(levelFilename);
    br = new BufferedReader(file);

    while ((input = br.readLine()) != null) {
        System.out.println(input);
    }
} catch (IOException e) {
    System.err.println("Error: unable to open file");
} finally {
    if (br != null) {
        try {
            br.close();
        } catch (IOException e) {}
    }
}

在while循环中,有几种方法可供选择。当前文件的值之间具有不同的分隔符。有"@“、空格和逗号。一种方法是您可以使用相同的分隔符,因此这些行如下所示:

代码语言:javascript
复制
DOG,79.0,409.0
DOG,150.0,320.0
CAT,73.0,194.0
DOG_HOUSE,72.0,158.0
CAT_HOUSE,51.0,591.0

这样,您就可以用逗号分隔每一行,并拥有您想要的所有元素。

如果希望保持当前格式,可以使用正则表达式来匹配每一行,并将每个元素作为一个组进行检索。

代码语言:javascript
复制
// just a starting point
Matcher m = Pattern.compile("^([A-Za-z\\_]+)\\s*\\@\\s*([0-9\\.]+)\\s*\\,\\s*([0-9\\.]+)$").matcher(input);

System.out.println(m.group(1) + " " + m.group(2) + " " + m.group(3));

这将返回所需的3个元素:

代码语言:javascript
复制
DOG 79.0 129.0
DOG 150.0 245.0
DOG_HOUSE 93.0 276.0
CAT_HOUSE 101.0 532.0
DOG 91.0 93.
CAT 123.0 294.0

无论采用哪种方法,一旦有了每一行的元素,就可以对第一个元素执行switch或if语句,以确定它是哪个对象,然后进行相应的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43721696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档