【问题标题】:how to read and write specific things in java如何在java中读写特定的东西
【发布时间】:2015-08-11 06:44:43
【问题描述】:

我来自 C,所以在 java 中处理文件对我来说有点棘手。

我想要以下文件:

a = 3 b = 5 c = 1 d = 10

我希望能够随时读取 a、b、c、d 的值,并且能够更改其中一些值。

我已经尝试了一些事情,但我什至没有接近。有人可以帮忙吗?

【问题讨论】:

  • 试着分解你的问题,一步一步地解决它。您当前读取文件的解决方案是什么?互联网为这个问题提供了大量资源。
  • 如果您可以选择文件的格式,我建议您使用诸如a = 3; b = 5; c = 1; d = 10; 之类的分隔符,以便阅读文件。
  • @KlausPrinoth 我会更进一步:为什么每行有多个键值对?使解析变得比应有的困难得多。
  • 旁注:来自 C 语言并不是提出坏问题的借口。这个问题很不具体;它几乎读起来就像“请告诉我我需要的一切并为我完成工作”。正如 reto 所说:专注于较小的部分;并逐步解决它们。并且:解决具体问题是学习一门新语言的一种方式;但并不总是最好的。先看一些书、教程有什么问题;在深入了解非常具体和狭隘的编码活动之前,先了解一下“整个事情”?
  • 我添加了一个答案,其中包含 Properties 类的示例。如果 OP 能够将样式更改为逐行对,那么这是我能想到的最简单的解决方案。

标签: java file


【解决方案1】:

如果您能够逐行更改值的格式,您可以查看 Java 中的 Properties。在这里,您可以逐行定义键值对,在键和值之间使用您可以指定的分隔符。

【讨论】:

    【解决方案2】:

    加载和使用属性的示例代码

    导入 java.io.; 导入 java.util.;

    公共类 ReadLineExample {

    public static void main(String args[]) throws FileNotFoundException {
        Properties ps =new Properties();
        // Create the file object
        File fileObj = new File("data.txt");
        try {
    
            FileInputStream fis = new FileInputStream(fileObj);
            ps.load(fis);
            System.out.println("Properties:"+ps);
            System.out.println("Get A:"+ps.getProperty("a"));
    
        } catch (Exception err) {
    
            err.printStackTrace();
        }
    }
    

    }

    -- data.txt的格式

    a = 3

    b = 5

    c = 1

    d = 10

    输出:

    属性:{b=5 , a=3 , d=10, c=1 } 得到答案:3

    【讨论】:

      【解决方案3】:

      这是完成此任务的一种非常“NullPointer-ish”的方式,但这里有一个示例

      String[] list = fileContents.split("=");
      String[] temp = list[1].split(" ");
      a = temp[0]
      temp = list[1].split(" ");
      b = temp[0]
      temp = list[2].split(" ");
      c = temp[0]
      temp = list[3].split(" ");
      d = temp[0]
      

      这种方式也不是很灵活。如果我是你,我会看Properties 类。它使这项工作变得更容易。

      您还可以编写一个函数来解析文本并查找“=”符号和“”之间的值(但是您必须删除“=”和值之间的“”...)

      【讨论】:

        【解决方案4】:

        由于不推荐使用属性,因此我已通过首选项改进了解决方案。

        package com.mypack.test;
        
        import java.io.*;
        import java.util.*;
        import java.util.prefs.Preferences;
        
        public class PreferencesExample {
        
            public static void main(String args[]) throws FileNotFoundException {
                Preferences ps = Preferences.userNodeForPackage(PreferencesExample.class);
                // Load  file object
                File fileObj = new File("data.xml");
                try {
                    FileInputStream fis = new FileInputStream(fileObj);
                    ps.importPreferences(fis);
                    System.out.println("Prefereces:"+ps);
                    System.out.println("Get property1:"+ps.getInt("property1",10));
        
                } catch (Exception err) {
                    err.printStackTrace();
                }
            }
        }
        

        data.xml 格式如下

        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE preferences SYSTEM 'http://java.sun.com/dtd/preferences.dtd'>
        <preferences EXTERNAL_XML_VERSION="1.0">
        <root type="user">
        <map />
        <node name="com">
          <map />
          <node name="mypack">
            <map />
            <node name="test">
              <map>
                <entry key="property1" value="80" />
                <entry key="property2" value="Red" />
              </map>
            </node>
          </node>
        </node>
        </root>
        </preferences>
        

        【讨论】:

        猜你喜欢
        • 2017-09-10
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多