在运行时不知道其扩展名的情况下加载文件

时间:2014-12-27 20:21:18

标签: java file-io assets

对不起,如果我听起来没有经验或没有任何意义,我目前正处于我的第二个计算机科学年,而我目前正在用Java制作一个轻型2D游戏引擎用于学校项目(我们可以选择我们想要做的事情这个)。

所以我现在正在研究资产经理。现在它包含一个带有assets和一个InputStreamProvider的hashmap。

InputStreamProvider是assetManager和不同类型的提供者之间的接口。目前,我只有一个FileProvider,它提供来自文件的流。

现在一切正常,但是当从ID中实际检索文件时,我的扩展程序出现了一个小问题。我认为使用资产管理器的一个优点是你可以只为你的资产使用ID,一旦加载就可以了,但是当你需要加载它们时,你怎么知道文件扩展?

这是我的解决方法,使用配置文件显然不是一个好的解决方案,该配置文件列出了用于资产的扩展,然后尝试在每次扩展时加载文件。

public class FileProvider extends AssetInputStreamProvider {

private final static String assetLocation = "assets/";
protected final static List<String> assetExtentions = new ArrayList<>();

static {
    try {
        InputStreamReader isr = new InputStreamReader(new FileInputStream(new File("conf/assets.cfg")));
        while (isr.ready()) {
            String ext = new String();
            Character c = (char) isr.read();
            while (!c.equals(',')) {
                ext += c;
                c = (char) isr.read();
            }
            assetExtentions.add(ext);
        }
    } catch (FileNotFoundException ex) {
        Logger.getLogger(AssetInputStreamProvider.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(AssetInputStreamProvider.class.getName()).log(Level.SEVERE, null, ex);
    }

}

@Override
public InputStream getInputStream(String type, String name) {

    File file;
    for (String assetExtention : assetExtentions) {
        try {
            System.out.println(assetLocation + type + "/" + name + "." + assetExtention);
            file = new File(assetLocation + type + "/" + name + "." + assetExtention);
            return new FileInputStream(file);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(FileProvider.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    return null;
}

}

所以我想知道是否有办法加载文件而不知道它的扩展,或者我是否完全弄错了加载资产的方法,然后如果有人能告诉我正确的方法这会非常有帮助。

出于好奇,这超出了我的问题的范围,但我看到有些人使用整数作为ID,但无论我多么想到它,我无法想象如何在没有硬编码资源的情况下做到这一点给他们一个int值所以我想得到一些提示知道如何实现这样一个系统。

非常感谢阅读并度过了美好的一天。

0 个答案:

没有答案