Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,如何编辑文本文件的一行?_Java_Configuration Files - Fatal编程技术网

在java中,如何编辑文本文件的一行?

在java中,如何编辑文本文件的一行?,java,configuration-files,Java,Configuration Files,好的,我知道行的值,我没有行号,我怎么能只编辑一行呢 它是一个配置文件,即 x=y 我需要一个命令来编辑x=y到x=y,z 甚至x=z.除非新线的长度与旧线的长度完全相同,否则最好的选择是 打开一个临时输出文件 逐行读取配置文件 搜索你的钥匙 如果找不到,只需将刚刚读取的行写入输出文件 如果可以找到,则将新值写入临时文件 直到你击中EOF 删除旧文件 将新文件重命名为旧文件 如果您的配置文件很小,您还可以在内存中执行整个解析/修改步骤,然后将最终结果写回配置文件,这样您就可以跳过临时文件(尽

好的,我知道行的值,我没有行号,我怎么能只编辑一行呢

它是一个配置文件,即 x=y 我需要一个命令来编辑x=y到x=y,z


甚至x=z.

除非新线的长度与旧线的长度完全相同,否则最好的选择是

  • 打开一个临时输出文件
  • 逐行读取配置文件
  • 搜索你的钥匙
  • 如果找不到,只需将刚刚读取的行写入输出文件
  • 如果可以找到,则将新值写入临时文件
  • 直到你击中EOF
  • 删除旧文件
  • 将新文件重命名为旧文件
如果您的配置文件很小,您还可以在内存中执行整个解析/修改步骤,然后将最终结果写回配置文件,这样您就可以跳过临时文件(尽管临时文件是一种很好的方法,可以防止在编写文件时出现故障时发生损坏)


如果这不是你想要的,你应该编辑你的问题,使其更加清晰。我只是在猜测你的要求。

一种方法是:

  • 将文件读入内存;e、 g.作为表示文件行的字符串数组
  • 找到要更改的字符串/行
  • 使用正则表达式(或任何形式)修改字符串/行
  • 从内存中的版本写入文件的新版本
  • 这方面有很多变化。在编写文件的新版本时,还需要小心,以防在编写过程中出现错误时丢失所有内容。(通常将新版本写入临时文件,重命名旧版本(例如作为备份),然后重命名新版本以替换旧版本。)


    遗憾的是,没有重写或删除一个普通文本文件中间的字符而不重写文件的大部分内容。这个“问题”不是Java特有的。这对于大多数主流操作系统上的文本文件建模/表示方式至关重要。

    如果您使用该配置格式,您可能希望使用

    java.util.Properties

    要在该文件上读/写的组件


    但是,如果您只想手工编辑它,您可以只编辑并匹配要更改的变量。

    如果您的数据都是键和值对,例如

    键1=值1

    键2=值2

    。。。然后将它们加载到属性对象中。在我看来,您需要一个FileInputStream来加载属性,使用myProperties.put(key,value)进行修改,然后使用FileOutputStream保存属性

    希望这有帮助


    rh

    在Java中,您可以使用`属性类:
    app.config文件:

    x=y
    
    java:

      public void writeConfig() throws Exception {
        Properties tempProp = new Properties();
        tempProp.load(new FileInputStream("app.config")); 
        tempProp.setProperty("x", "y,z");
        tempProp.store(new FileOutputStream("app.config"), null); 
    
      }
    

    我想他有一个基于行的配置文件(就像旧的Windows3.1版本一样),他想把一行从“key=value”替换成“key=value2”之类的东西。。。他在找一把钥匙什么的。问题还不清楚。请把问题解释清楚,否则你就得不到正确的答案。什么。我很清楚这个问题。你们不明白吗?(不是讽刺!)