我有一个java程序,可以通过提供路径为单个文件替换单词。我想更改这个java程序,以便可以在包含许多文件的文件夹中找到它。一旦进行更改,它就会写回文件。我一直坚持如何做到这一点。我知道我需要一个循环来遍历文件。 问题:我应该使用什么java api来从文件夹中读取 这是我的代码:
import java.io.* ;
public class Replace{
public static void main(String[] args) {
File file = new File("My_text.txt");
try
{
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "", oldtext = "";
while((line = reader.readLine()) != null)
{
oldtext += line + "\r\n";
}
reader.close();
String replacedtext = oldtext.replaceAll("<eol> ", "");
replacedtext = replacedtext.replaceAll("<eos> ", "");
replacedtext = replacedtext.replaceAll(" \\.", ".");
replacedtext = replacedtext.replaceAll(" \\,", ",");
//replacedtext = replacedtext.replaceAll(" ", "");
replacedtext = replacedtext.replaceAll(" \\'s", "'s");
FileWriter writer = new FileWriter("My_text.txt");
writer.write(replacedtext);
writer.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
答案 0 :(得分:0)
首先将代码移动到一个方法中,该方法可以将文件名作为输入并在该文件中进行替换。然后使用file.listFiles()
编写一些代码来递归目录中的所有文件并处理它们。类似的东西:
public static void main(String[] args) {
String myDir = "C:\Path\To\Directory";
recurseOnFile(new File(myDir));
}
private static void recurseOnFile(File passedFile) {
if (passedFile.isFile()) {
replaceInFile(passedFile);
}else if (passedFile.isDirectory()) {
File[] listOfFiles = passedFile.listFiles();
for (File inDir : listOfFiles) {
recurseOnFile(inDir);
}
}
}
private static void replaceInFile(File file) {
//put your current code for replacing in one file here
}
这将从一个位置开始,如果该位置是文件,它将处理它。如果该位置是目录,则它将处理目录中的所有文件。如果目录包含其他目录,它将继续递归处理,直到处理完原始位置的所有子文件夹中的所有文件。
答案 1 :(得分:0)
这样就可以了。您可以使用方法listFiles()
获取所有文件,您可以File
从java.io
调用这些文件。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Replace {
public static void main(String[] args) {
File folder = new File("C:/PathToYourFolder");
File[] listOfFiles = folder.listFiles();
for(File file : listOfFiles) {
replaceText(file);
}
}
public static void replaceText(File file) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "", oldtext = "";
while ((line = reader.readLine()) != null) {
oldtext += line + "\r\n";
}
reader.close();
String replacedtext = oldtext.replaceAll("<eol> ", "");
replacedtext = replacedtext.replaceAll("<eos> ", "");
replacedtext = replacedtext.replaceAll(" \\.", ".");
replacedtext = replacedtext.replaceAll(" \\,", ",");
// replacedtext = replacedtext.replaceAll(" ", "");
replacedtext = replacedtext.replaceAll(" \\'s", "'s");
FileWriter writer = new FileWriter(file);
writer.write(replacedtext);
writer.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}