繁体   English   中英

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

[英]Parsing & reading/writing to a Custom file

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

现在我只是在阅读一个预先写好的文件。 (是的,我已经查看了其他几个类似的问题。这些似乎甚至没有接近我正在寻找的内容,因为我不想使用外部库。[链接]( 我如何解析 YAML文件? ))

但是,我目前拥有的代码似乎没有返回正确的结果。 它不断返回一个空字符串,暗示该文件不包含我要求的值。


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 来下载资源)因此,我想创建自己的库,以消除对外部库的依赖并提高可靠性和可定制性。

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

如果你想使用正则表达式,你可以使用matches 方法。
这是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”

英语不好,如果你保存任何问题,回复我

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM