您好我正在使用Android应用,这是我的问题
我有一个文本文件,可能有100行长,但不同于手机,但我们可以说某个部分是这样的
line 1 = 34
line 2 = 94
line 3 = 65
line 4 = 82
line 5 = 29
etc
每一行都将等于某个数字,但是该数字将与手机不同,因为我的应用程序将更改此数字,并且在我的应用程序安装之前可能已经不同。所以这是我的问题,我想搜索文本文件说“第3行=”然后删除整行,并将其替换为“第3行=某些数字”
我的主要目标是在第3行的末尾更改该数字并保持第3行与文本完全相同我只想编辑数字但问题是数字总是不同
我怎么能这样做?谢谢你的帮助
答案 0 :(得分:2)
您不能在文件中间“插入”或“删除”字符。也就是说,您无法在文件中间用123
或1234
替换12
。
因此,要么“填充”每个数字,以便它们都具有相同的宽度,即,您代表43
,例如000043
,或者您可能必须重新生成整个文件。
要重新生成整个文件,我建议您逐行读取原始文件,根据需要处理这些行,然后将它们写入新的临时文件。然后,当您通过时,将旧文件替换为新文件。
要处理line
我建议您执行类似
String line = "line 3 = 65";
Pattern p = Pattern.compile("line (\\d+) = (\\d+)");
Matcher m = p.matcher(line);
int key, val;
if (m.matches()) {
key = Integer.parseInt(m.group(1));
val = Integer.parseInt(m.group(2));
// Update value if relevant key has been found.
if (key == 3)
val = 123456;
line = String.format("line %d = %d", key, val);
}
// write out line to file...
答案 1 :(得分:2)
感谢各位回复,但我最终做的是在bash和外卡命令*中使用sed命令来替换该行,然后通过java运行脚本,这有点像这样
<强>脚本强>
busybox sed -i's / line 3 =。* / line 3 = 70 / g'/ path / to / file
<强>爪哇强>
命令
的execCommand( “/路径/到/脚本”);
方法
public Boolean execCommand(String command)
{
try {
Runtime rt = Runtime.getRuntime();
Process process = rt.exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes(command + "\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
process.waitFor();
} catch (IOException e) {
return false;
} catch (InterruptedException e) {
return false;
}
return true;
}
答案 2 :(得分:0)
最简单的解决方案是将整个文件读入内存,然后替换想要更改的行,然后将其写回文件。
例如:
String input = "line 1 = 34\nline 2 = 94\nline 3 = 65\nline 4 = 82\nline 5 = 29\n";
String out = input.replaceAll("line 3 = (\\d+)", "line 3 = some number");
...输出:
line 1 = 34
line 2 = 94
line 3 = some number
line 4 = 82
line 5 = 29
答案 3 :(得分:0)
几个想法。更简单的方法是(如果可能的话)将这些行存储在集合中(如ArrayList)并在集合中执行所有操作。
可以找到另一种解决方案here。如果需要替换文本文件中的内容,可以定期调用方法来执行此操作:
try {
BufferedReader in = new BufferedReader(new FileReader("in.txt"));
PrintWriter out = new PrintWriter(new File("out.txt"));
String line; //a line in the file
String params[]; //holds the line number and value
while ((line = in.readLine()) != null) {
params = line.split("="); //split the line
if (params[0].equalsIgnoreCase("line 3") && Integer.parseInt(params[1]) == 65) { //find the line we want to replace
out.println(params[0] + " = " + "3"); //output the new line
} else {
out.println(line); //if it's not the line, just output it as-is
}
}
in.close();
out.flush();
out.close();
} catch(Exception e) {
e.printStackTrace();
}