public void removeLine() {
try {
File dir = new File("chars");
if(dir.exists()) {
String read;
File files[] = dir.listFiles();
for (int j = 0; j < files.length; j++) {
File loaded = files[j];
if (loaded.getName().endsWith(".txt")) {
Scanner s = new Scanner (loaded);
while (s.hasNextLine()) {
read = s.nextLine();
if (read.contains("char-15")) {
read.replace(read, "");
System.out.println(loaded.getName() +" - Data: "+read);
break;
}
}
}
}
}
} catch (Exception e) {
}
}
这应该做的是用空字符串替换包含&#34; char-15&#34;的每一行。
当我运行它时,它不会删除所有文件中的行。我不能手动执行此操作,因为有超过5000个文件。
如何在所有文件中删除此特定行?
答案 0 :(得分:2)
您可以使用Apache Common IO API
这是完整的工作示例
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class FileUpdater {
public static void main(String[] args) throws IOException {
File dir = new File("D:\\dummy");
if (dir.exists() && dir.isDirectory()) {
File[] listFiles = dir.listFiles();
for (File file : listFiles) {
if (file.getName().contains(".txt")) {
String fileString = FileUtils.readFileToString(file);
String finalString = fileString.replaceAll("char-15", "");
FileUtils.writeStringToFile(file, finalString);
}
}
}
}
}
以上代码会在每个文件中replace
char-15
到empty
}
答案 1 :(得分:0)
在Java 7中,您可以执行以下操作:
if (loaded.getName().endsWith(".txt")) {
Path path = Paths.get(loaded.getName());
String content = new String(Files.readAllBytes(path));
content = content.replaceAll("char-15", "");
Files.write(path, content.getBytes());
}
答案 2 :(得分:0)
Java字符串是不可变的和最终的,无论你在String中做什么操作,它都只会创建新的实例。因此read.replace(read, "");
无法替换文件中的单词。
答案 3 :(得分:0)
首先将文件加载为String:
public static String readAllText(InputStream is) {
StringBuilder sb = new StringBuilder();
try {
Reader r = new InputStreamReader(is);
int c;
while ((c = r.read()) != -1) sb.append(char.class.cast(c));
} catch (Exception e) {
//Handle Exception
}
return sb.toString();
}
然后删除:
public static String removeUntil(String str, String c, int st)
{
StringBuilder sb = new StringBuilder(str);
str = sb.reverse().toString();
for(int i = 0;i<st;i++)
str = str.substring(0,str.lastIndexOf(c));
sb = new StringBuilder(str);
str = sb.reverse().toString();
return str;
}
代表:removeUntil(&#34; I.want.remove.this.until.third.dot&#34;,&#34;。&#34;,3);那么结果 - &gt; this.until.third.dot