当前位置: 首页 > 知识库问答 >
问题:

如何使用java替换文件中特定行后的字符串

祁驰
2023-03-14

我有一个类似的情况,如果找不到类似的字符串,我需要更改批处理文件中的一行。

假设我有一个如下代码(我知道这不是正确的代码,因为它只是一个虚拟的)

public static void main(String[] args) {

 if (user == '1234') {
   ENV DEV
   set DB myDBDEV
   set Excel myExecelDEV
   set API MyAPIURLDEV
 } elseif (user == '5678') {
   ENV UAT
   set DB myDBUAT
   set Excel myExecelUAT
   set API MyAPIURLUAT
  }
 }
}

现在我想让java读取上面的文件,找到ENV作为DEV并更改值,如myDBDEV、myExecelDEV、MyAPIURLDEV等。

我可以使用下面的代码找到行号

       FileInputStream fis = new FileInputStream("C:\\Users\\owner\\Desktop\\batch\\MYbatch-env.csh");
        InputStreamReader input = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(input);
        String data;
        String result = new String();
        int i=0;
        while ((data = br.readLine()) != null) {
            i++;
            if(data.contains("ENV DEV")) {
                System.out.println("line number -> "+i);
            }
            result = result.concat(data + "\n");
        }

我已经尝试了下面的代码,但这不是返回行号,所以我使用上面的方法

使用java在文本文件中查找单词的行号

我也尝试了下面的方法,但似乎不起作用

如何使用java替换文件中特定行后的字符串

现在问题语句是replaceAll函数将删除所有键,但我想删除下一个键表示值的字符串。它是一个文本字符串,而不是哈希图之类的东西,

在ifblock中,如果DB字符串是myDBDEV2,那么我想将值更改为myDBDEV

例子:

如果找到以下字符串

   ENV DEV

然后下面的值应该检查密钥数据库的值,如果没有找到所需的值,则替换它。

   set DB myDBDEV
   set Excel myExecelDEV
   set API MyAPIURLDEV

最主要的是代码应该只对块进行更改,否则如果变量应该受到影响,就像我在上面的 URL 中显示的文件示例一样。

共有1个答案

申屠洛华
2023-03-14

以下解决方案对我有用

public static void main(String[] args) throws Exception {
        String filepath= "C:\\Users\\Demo\\Desktop\\batch\\Demo.sh";
        FileInputStream fis = new FileInputStream(filepath);
        InputStreamReader input = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(input);
        String data;
        String result = new String();
        int lineNumber=0;
        int i=0;

    while ((data = br.readLine()) != null) {
        i++;
        if(data.contains("My String data")) {
            System.out.println("line number -> "+i);
            lineNumber=i;
            break;
        }
        result = result.concat(data + "\n");
    }
    br.close();
    lineNumber=lineNumber+1;
    System.out.println(lineNumber);
    String Mystring ="    Mystring";
    String Mystringline = Files.readAllLines(Paths.get(filepath)).get(lineNumber-1); // get method count from 0 so -1
    System.out.println("Line data ->> "+Mystringline);
    if(!Mystringline.equalsIgnoreCase(Mystring)) {
         setVariable(lineNumber, Mystring, filepath);
    }else {
        System.out.println("Mystring is already pointing to correct DB");
    }
    System.out.println("Succesfully Change");
}

public static void setVariable(int lineNumber, String data, String filepath) throws IOException {
    Path path = Paths.get(filepath);
    List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
    lines.set(lineNumber - 1, data);
    Files.write(path, lines, StandardCharsets.UTF_8);
}
}
 类似资料:
  • 问题内容: 我有一个名为log.txt的文本文件,它具有以下数据 第一个逗号之前的数字是指定每个项目的索引。 我想做的是读取文件,然后将给定行中字符串的一部分(例如textFiles / a.txt)替换为另一值(例如something / bob.txt)。 这就是我到目前为止 问题答案: 一种方法是使用: 您还可以使用正则表达式,或查找搜索字符串在一行中的何处。

  • 问题内容: 如何使用php替换特定行。我不知道行号。我要替换包含特定单词的行。 问题答案: 您可以在较小的文件上使用一种方法,该文件可以两次装入您的内存: 快速说明,PHP> 5.3.0支持lambda函数,因此您可以删除命名的函数声明并将映射缩短为: 从理论上讲,您可以使它成为单个(很难理解)的php语句: 您应该对较大的文件使用另一种(较少占用内存的方法):

  • 示例:[可爱]微笑这是测试[笑哭] 目的:将这个字符串中所有中括号表示的文字替换为emoji

  • 问题内容: 我的Linux机器上有一个2GB的文本文件,我正尝试将其导入数据库。 我遇到的问题是,正在处理此rdf文件的脚本在一行上令人窒息: 我想替换用。我无法在所有行上进行搜索/替换,但是我有行号,因此我希望有一些简单的方法可以将一行替换为新文本。 有什么想法/建议吗? 问题答案:

  • 我正在从文本文件中读取预订系统的座位数据,并将其写入ArrayList中。一个行将被放入一个可变的fileline中。文件行是从每个“,”中拆分出来的,并放入名为Components的数组中。然后将组件放入对象中。 txt文件示例 然后进入一个if语句,检查座位是否合适,如果合适,我想将false更改为true,并将乘客名添加为null,但只在合适的座位上。我想知道是否有任何方法可以覆盖文本文件中