解析和读取/写入自定义文件

时间:2019-03-25 13:15:45

标签: java

我正在创建自己的自定义文件解析器(它可以读写.yml文件或任何其他自定义文本文件)

现在,我正在读取预写文件。 (是的,我已经看过其他几个类似的问题。由于我不想使用外部库,这些问题似乎还没有达到我的期望。 [链接](How do I parse a YAML file?))

但是,我当前拥有的代码似乎未返回正确的结果。 它会不断返回一个空字符串,这意味着该文件不包含我所要求的值。


protected String readValue(String value) {

        BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getResource("Locale.txt")));
        boolean isMultiline = false;
        String multiLineCombo = "";



        for (String s : reader.lines().toArray(String[]::new)) {
            if (s.startsWith(Pattern.compile("[^a-zA-Z0-9]") + "")) {
                continue;
            }

            if (s.trim().startsWith(Pattern.quote("(?i)") + value + ":")) {
                if (s.contains(": |-")) {
                    isMultiline = true;
                    continue;
                }
                if (isMultiline) {
                    if (!s.contains(":")) {
                        multiLineCombo = multiLineCombo.concat(s + "\n");
                        continue;
                    } else {
                        isMultiline = false;
                        return multiLineCombo;
                    }

                }

                try {
                    reader.close();
                } catch (Exception e) {
                }
                return s.substring(s.indexOf(":"));
            }

        }

        return "";
    }

我正在寻找读取简单构造的值的方法:


# comments...
OwnerName: 'something here'

# more comments
# .
# yeet...
ListOfNames:
- Ann
- Brent
- Crumpled Bananas
- more values

# multiline strings like this
MultipleLines: |-
  Line one
  Line two
  and line three


是的,我已经写了我要拉入目标文件的值,这些值在其中,我只是错误地读取了它们。

如果有人对我在这里做错了什么提示或可以帮助我,那真棒!

编辑: 似乎我需要解释为什么我要尝试创建自己的文件阅读器而不是使用诸如SnakeYaml之类的第三方...主要是因为我不想只解析YAML文件,因此我正在寻找更多我自己的自定义数据存储系统。我正在使用的库具有内置的yaml读取器/写入器,但是它会忽略注释,将其删除并删除所有空格和我添加的格式。此外,我不希望这过于依赖于所说的java应用程序具有可用的指定库。 (取决于它是否可以访问Internet并下载资源) 因此,我想创建自己的应用程序,既不必依赖外部库,又可以提高可靠性和可定制性。

1 个答案:

答案 0 :(得分:0)

startinsWith方法不是那样使用的,也许我想。
这是javadoc。
https://docs.oracle.com/javase/9/docs/api/java/lang/String.html#startsWith-java.lang.String-

如果要使用正则表达式,则可以使用matchs方法。
这是javadoc。
https://docs.oracle.com/javase/9/docs/api/java/lang/String.html#matches-java.lang.String-

模式示例链接:https://www.tutorialspoint.com/java/java_regular_expressions.htm 我认为您的用法有问题。

一些建议:
1.逐个字符地分析行。
2.使某些类保存您的数据。例如“ YAMLToken”,“ YAMLKeyValuePair”,“ YAMLList”

英语不好,如果您有任何疑问,请回复我