【问题标题】:Java Read numbers from txt fileJava从txt文件中读取数字
【发布时间】:2016-05-27 22:26:07
【问题描述】:

假设我们有一个像这样的文本文件:

#this is a config file for John's server


MAX_CLIENT=100

  # changed by Mary


TCP_PORT = 9000

我已经编写了以下代码:

 this.reader = new BufferedReader(new FileReader(filename));
    String line;

    line = reader.readLine();
    while (line.length() != 0) {

        line = line.trim();
        if (line.contains("#") || line.contains("")) {
            line = reader.readLine();

        } else {
            if (line.contains("MAX_CLIENT=")) {
                line = line.replace("MAX_CLIENT=", "");
                this.clientmax = Integer.parseInt(line);
            }

            if (line.contains("TCP_PORT=")) {

                line = line.replace("TCP_Port=", "");
                tcp_port = Integer.parseInt(line);
            }

        }
    }

其中 clientmax 和 tcp_port 的类型为 int。

clientmax 和 tcp_port 是否会收到此代码的值?

如果我的文本文件有点改变,我该怎么办:

MAX_CLIENT=100# changed by Mary

在数字后包含注释。

ow,btw # 代表评论的开始。

谢谢。

【问题讨论】:

    标签: java string bufferedreader trim


    【解决方案1】:

    您应该使用为此目的设计的类:Properties

    此类为您处理 cmets,因此您不必担心它们。

    你可以这样使用它:

    Properties prop = new Properties();
    prop.load(new FileInputStream(filename));
    

    然后您可以使用以下方法从中提取属性:

    tcpPort = Integer.parseInt(prop.getProperty("tcpPort"));
    

    或保存使用:

    prop.setProperty("tcpPort", String.valueOf(tcpPort));
    

    【讨论】:

    • 我知道属性处理完整行的 cmets,但它是否处理尾随行 cmets?
    • 我也很好奇..如果您的文本格式为:MAX_CLIENT=100#,由 Mary 更改。属性类会只选择值 100 而在它之后什么都不选择吗?
    • 遗憾的是,它并不是 100% 适合这个目的,但是另一方面,如果你有包含 # 字符的字符串属性,属性类甚至允许你存储 arbery其属性中的 unicode 字符和换行符。将 cmets 与值放在同一行并不常见,因为它在解析时会带来麻烦。
    【解决方案2】:

    使用line.startsWith("#") 而不是line.contains("#")

    执行此操作时,请记住,当您到达评论字符时,您需要停止阅读。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      相关资源
      最近更新 更多