如何用 java 替换文本文件中的特定字符串?
How to replace specific String in a text file by java?
我正在用java中的文本文件编写程序,我需要做的是修改文件中的特定字符串。
例如,文件中有一行(文件包含很多行)如“username,password,e,d,b,c,a”
我想将其修改为“用户名、密码、f、e、d、b、c”
我搜索了很多但一无所获。怎么处理?
一般来说,您可以分 3 个步骤完成:
- 读取文件并将其存储在字符串中
- 根据需要更改字符串(您的“用户名、密码...”修改)
- 将字符串写入文件
您可以在Whosebug 上搜索每一步的说明。
这是直接在 Stream 上工作的可能解决方案:
public static void main(String[] args) throws IOException {
String inputFile = "C:\Users\geheim\Desktop\lines.txt";
String outputFile = "C:\Users\geheim\Desktop\lines_new.txt";
try (Stream<String> stream = Files.lines(Paths.get(inputFile));
FileOutputStream fop = new FileOutputStream(new File(outputFile))) {
stream.map(line -> line += " manipulate line as required\n").forEach(line -> {
try {
fop.write(line.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
如果您的文件与此类似:
username:username123,
password:password123,
将文件加载到字符串后,您可以执行如下操作:
int startPosition = file.indexOf("username") + 8; //+8 is length of username with colon
String username;
for(int i=startPosition; i<file.length(); i++) {
if(file.charAt(i) != ',') {
username += Character.toString(file.charAt(i));
} else {
break;
}
System.out.println(username); //should prong username
}
编辑完所有要编辑的内容后,将编辑后的字符串保存到文件中。
有很多方法可以解决这个问题。阅读 String 文档以了解对 String 的操作。没有您的代码,我们无法恰当地帮助您。
你可以这样试试:
首先,逐行读取文件,检查每一行是否存在要替换的字符串,替换它,并将内容写入另一个文件。这样做直到到达 EOF。
import java.io.*;
public class Files {
void replace(String stringToReplace, String replaceWith) throws IOException {
BufferedReader in = new BufferedReader(new FileReader("/home/asn/Desktop/All.txt"));
BufferedWriter out = new BufferedWriter(new FileWriter("/home/asn/Desktop/All-copy.txt"));
String line;
while((line=in.readLine())!=null) {
if (line.contains(stringToReplace))
line = line.replace(stringToReplace, replaceWith);
out.write(line);
out.newLine();
}
in.close();
out.close();
}
public static void main(String[] args) throws IOException {
Files f = new Files();
f.replace("amount", "@@@@");
}
}
如果要使用同一个文件,将内容存储在缓冲区(字符串数组或列表)中,然后将缓冲区的内容写入同一个文件。
算法如下:
打开一个临时文件以保存编辑后的副本。
逐行读取输入文件。
检查当前行是否需要替换
String
class 的各种方法可以用来做到这一点:
equals
:将此字符串与指定对象进行比较。当且仅当参数不为 null 并且是表示与此对象相同的字符序列的 String 对象时,结果才为真。
equalsIgnoreCase
:将此字符串与另一个字符串进行比较,忽略大小写。
contains
: Returns 当且仅当此字符串包含指定的 char 值序列时才为真。
matches (String regex)
:判断这个字符串是否匹配给定的正则表达式。
startsWith
:测试此字符串是否以指定前缀开头(区分大小写)。
endsWith
:测试此字符串是否以指定前缀开头(区分大小写)。
还有其他谓词函数:contentEquals
, regionMatches
如果要求的条件是true
,提供currentLine的替换:
if (conditionMet) {
currentLine = "Your replacement";
}
或使用String
方法replace/replaceFirst/replaceAll
一次替换内容
- 将当前行写入输出文件。
- 确保在从输入文件读取所有行后关闭输入和输出文件。
- 用输出文件替换输入文件(如果需要,例如,如果没有发生变化,则不需要替换)。
我正在用java中的文本文件编写程序,我需要做的是修改文件中的特定字符串。 例如,文件中有一行(文件包含很多行)如“username,password,e,d,b,c,a” 我想将其修改为“用户名、密码、f、e、d、b、c” 我搜索了很多但一无所获。怎么处理?
一般来说,您可以分 3 个步骤完成:
- 读取文件并将其存储在字符串中
- 根据需要更改字符串(您的“用户名、密码...”修改)
- 将字符串写入文件
您可以在Whosebug 上搜索每一步的说明。
这是直接在 Stream 上工作的可能解决方案:
public static void main(String[] args) throws IOException {
String inputFile = "C:\Users\geheim\Desktop\lines.txt";
String outputFile = "C:\Users\geheim\Desktop\lines_new.txt";
try (Stream<String> stream = Files.lines(Paths.get(inputFile));
FileOutputStream fop = new FileOutputStream(new File(outputFile))) {
stream.map(line -> line += " manipulate line as required\n").forEach(line -> {
try {
fop.write(line.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
如果您的文件与此类似:
username:username123,
password:password123,
将文件加载到字符串后,您可以执行如下操作:
int startPosition = file.indexOf("username") + 8; //+8 is length of username with colon
String username;
for(int i=startPosition; i<file.length(); i++) {
if(file.charAt(i) != ',') {
username += Character.toString(file.charAt(i));
} else {
break;
}
System.out.println(username); //should prong username
}
编辑完所有要编辑的内容后,将编辑后的字符串保存到文件中。
有很多方法可以解决这个问题。阅读 String 文档以了解对 String 的操作。没有您的代码,我们无法恰当地帮助您。
你可以这样试试: 首先,逐行读取文件,检查每一行是否存在要替换的字符串,替换它,并将内容写入另一个文件。这样做直到到达 EOF。
import java.io.*;
public class Files {
void replace(String stringToReplace, String replaceWith) throws IOException {
BufferedReader in = new BufferedReader(new FileReader("/home/asn/Desktop/All.txt"));
BufferedWriter out = new BufferedWriter(new FileWriter("/home/asn/Desktop/All-copy.txt"));
String line;
while((line=in.readLine())!=null) {
if (line.contains(stringToReplace))
line = line.replace(stringToReplace, replaceWith);
out.write(line);
out.newLine();
}
in.close();
out.close();
}
public static void main(String[] args) throws IOException {
Files f = new Files();
f.replace("amount", "@@@@");
}
}
如果要使用同一个文件,将内容存储在缓冲区(字符串数组或列表)中,然后将缓冲区的内容写入同一个文件。
算法如下:
打开一个临时文件以保存编辑后的副本。
逐行读取输入文件。
检查当前行是否需要替换
String
class 的各种方法可以用来做到这一点:equals
:将此字符串与指定对象进行比较。当且仅当参数不为 null 并且是表示与此对象相同的字符序列的 String 对象时,结果才为真。equalsIgnoreCase
:将此字符串与另一个字符串进行比较,忽略大小写。contains
: Returns 当且仅当此字符串包含指定的 char 值序列时才为真。matches (String regex)
:判断这个字符串是否匹配给定的正则表达式。startsWith
:测试此字符串是否以指定前缀开头(区分大小写)。endsWith
:测试此字符串是否以指定前缀开头(区分大小写)。
还有其他谓词函数:
contentEquals
,regionMatches
如果要求的条件是
true
,提供currentLine的替换:
if (conditionMet) {
currentLine = "Your replacement";
}
或使用String
方法replace/replaceFirst/replaceAll
一次替换内容
- 将当前行写入输出文件。
- 确保在从输入文件读取所有行后关闭输入和输出文件。
- 用输出文件替换输入文件(如果需要,例如,如果没有发生变化,则不需要替换)。