使用java从具有多个文件的文件夹替换Word

时间:2016-08-09 22:46:33

标签: java

我有一个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();
         }
    }
}

2 个答案:

答案 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()获取所有文件,您可以Filejava.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();
        }
    }
}