私は次のものを持っています:
- 「AllFilesFolder」という名前の多くのファイル(約300000)を含むフォルダー
- 「namesList」という名前の名前のリスト
- 「filteredFolder」という名前の空のフォルダ
リスト内の名前のいずれかを継続するファイルを空のフォルダー「filteredFolder」に移動して、フォルダー「AllFilesFolder」をフィルター処理したいと思います。
私は次のコードでこの問題に取り組んでいます:
public static void doIt(List<String>namesList, String AllFilesFolder, String filteredFolder) throws FileNotFoundException {
// here we put all the files in the original folder in List variable name "filesList"
File[] filesList = new File(AllFilesFolder).listFiles();
// went throught the files one by one
for (File f : filesList) {
try {
FileReader fr = new FileReader(f);
BufferedReader reader = new BufferedReader(fr);
String line = "";
//this varibale used to test withir the files contins names or not
//we set it to false.
boolean goodDoc = false;
//go through the file line by line to chick the names (I wounder if there are a simbler whay)
while ((line = reader.readLine()) != null) {
for(String name:namesList){
if ( line.contains(name)) {
goodDoc = true;
}
}
}
reader.close();
// if this file contains the name we put this file into the other folder "filteredFolder"
if (goodDoc) {
InputStream inputStream = new FileInputStream(f);
OutputStream out = new FileOutputStream(new File(filteredFolder + f.getName()));
int read = 0;
byte[] bytes = new byte[4096];
while ((read = inputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
inputStream.close();
out.flush();
out.close();
}
} catch (Exception e) {
System.err.println(e);
}
}
}
これを行うことにより、解決するためにあなたのアドバイスが必要な2つの問題があります。
私は各ファイルを2回読み取っています。1回は検索用で、もう1回は別のフォルダーに配置するためです。
namesListを検索するとき、名前を1つずつ取得するforループがあります。リストを1回検索する方法はありますか(ループなし)。
よろしくお願いします