gpt4 book ai didi

java - 在Java中写入txt中的特定行

转载 作者:行者123 更新时间:2023-12-01 11:27:52 25 4
gpt4 key购买 nike

这是我的代码:

public static void modif(String name, String color, int k)
{
try {
File input= new File("file1.txt");
File output= new File("temp.txt");

String correctLine = (String) FileUtils.readLines(input).get(k-3);

BufferedReader br = new BufferedReader(new FileReader(input));
BufferedWriter bw = new BufferedWriter(new FileWriter(output));
String line="";


while ((ligne = br.readLine()) != null){

String lineConcat = line + "\n";

if(ligne.startsWith("\""+name+"\"")){

System.out.println(correctLine); // i can display the line to change

bw.write("\"" + name + "\"" + ": " + "\"" + color + "\"" + "\n"); // this is the way i replace my line
System.out.println("Awesome !");
bw.flush();
}else{
bw.write(lineConcat);
bw.flush();
}
}
bw.close();
br.close();

output.renameTo(new File("file2.txt"));

} catch (IOException e) {
e.printStackTrace();
}

}

基本上我想在检测到条件时替换特定行。我知道要更改哪一行,但不知道如何替换它。因为现在我只能检测行的开头并更改当前行而不是前一行。

我尝试使用 FileUtils.writeStringToFile 但它不起作用,所以我来这里寻求帮助:(

谢谢大家!

编辑:我的输入是这样的:

{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
6.07721374522497,
43.08716485432151
],
[
6.051202617426629,
43.07969629888752
],
[
6.032563261594762,
43.07758570385911
]
]
]
},
"properties": {
"_storage_options": {
"color": "Orange"
},
"name": "CARQUEIRANNE"
}
}

我实际上正在做的是,当我找到“name”行:“CAREQUEIRANNE”时,我想替换他的颜色属性,所以我必须转到当前行 - 3,我真的不知道该怎么做它

编辑2:

我的方法是这样调用的:

                BufferedReader in2 = new BufferedReader(new FileReader("file1.txt"));
String line;
String lineConcat = null;
int k=1;

while ((line = in2.readLine()) != null)
{


lineConcat = line + "\n";

String myPattern = tabCity[21];
Pattern p = Pattern.compile(myPattern);
Matcher m = p.matcher(lineConcat);
//Matcher m2 = p2.matcher(lineConcat);
if (m.find()){

System.out.println("Found !");
System.out.println(k);

modif("color", "Orange", k);


}
else
{
System.out.println("Not Found");
}

k++;

}
in2.close();

当我发现我的模式与文件中的研究相匹配时,我调用我的函数来替换城市的颜色属性

编辑3:

@BrettWalker 这是新代码:

public static void modif(String nom, String color, int k)
{
try {
File input = new File("file1.txt");
File output = new File("temp.txt");

BufferedReader br = new BufferedReader(new FileReader(input));
BufferedWriter bw = new BufferedWriter(new FileWriter(output));
String line="";

Stack st = new Stack();

st.push(br.readLine());
st.push(br.readLine());
st.push(br.readLine());

while ((ligne = br.readLine()) != null){

String ligneConcat = ligne + "\n";

st.push(ligneConcat);

String oldLine = (String) st.pop();

if(ligne.startsWith("\""+nom+"\"")){


oldLine = "\"" + nom + "\"" + ": " + "\"" + color + "\"" + "\n";

}
bw.write(oldLine);
}


bw.write((int) st.pop());
bw.write((int) st.pop());
bw.write((int) st.pop());

bw.close();
br.close();

output.renameTo(new File("file2.txt"));

} catch (IOException e) {
e.printStackTrace();
}

}

最佳答案

在 Java 中,您需要使用队列(缓冲区)来临时保存文件的一小段,以便您能够检测到何时并允许您更改相应的行。

不是立即写出该行,而是将该行插入队列(缓冲区)并从队列中弹出下一个项目。如果刚刚弹出的行是要更改的行,则将修改后的行写入文件,否则将原始行写入文件。

一些糟糕的伪代码来帮助表达这个想法。

// Open up the readers/writers

// Prime the queue with the first few line of the file.
// Need to add safeguard to protect against small files!!
queue.push(br.readLine());
queue.push(br.readLine());
queue.push(br.readLine());

while ((line = br.readLine()) != null) {
String lineConcat = line + "\n";

queue.push(lineConcat);

String oldLine = queue.pop();

if (line.startsWith("\""+name+"\"")) {
oldLine = < Modify oldLine >
}

bw.write(oldLine)
}

// Empty the queue
bw.write(queue.pop());
bw.write(queue.pop());
bw.write(queue.pop());

// Close the readers/writer

关于java - 在Java中写入txt中的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30666965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com