我的情况类似,如果找不到相似的字符串,我需要在批处理文件中更改一行。
假设我在批处理中有类似下面的代码(我知道它不是正确的代码,因为它只是一个虚拟的代码)
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");
}
我试过下面的代码,但那不是返回行号,所以我使用上面的方法
Finding line number of a word in a text file using java
我也试过以下方法,但似乎无法正常工作
How to replace an string after a specific line in a file using java
现在问题语句是replaceAll函数将删除所有键但我想删除下一个键的键意味着值。它是一个文本字符串而不是一个hashmap类的东西,
如果阻止,如果DB字符串是myDBDEV2,那么我想将值更改为myDBDEV
示例:
如果发现低于字符串
ENV DEV
然后低于该值应检查关键数据库的值,如果未找到所需值则替换
set DB myDBDEV
set Excel myExecelDEV
set API MyAPIURLDEV
主要的是代码应该只在块中进行更改,否则如果变量应该作为我在上面的URL中显示的文件示例受到影响。
答案 0 :(得分:0)
以下解决方案为我工作
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);
}
}