我有以下内容:
我想过滤文件夹“AllFilesFolder”,将任何包含列表中任何名称的文件移动到空文件夹“filteredFolder”。
我通过以下代码解决了这个问题:
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);
}
}
}
通过这样做,我有两个问题,我需要你的建议来解决:
我正在阅读每个文件两次,一次搜索,另一次将其放入另一个文件夹。
在搜索namesList时,我有for循环来逐个获取名称,有没有办法一次搜索列表(没有循环)。
非常感谢提前
答案 0 :(得分:0)
我正在阅读每个文件两次,一次搜索,另一次将其放入另一个文件夹。
使用NIO可提高复制性能。这是code example.如果您可以使用Java 7,那么您可以使用Files.copy()
在搜索namesList时我有for循环来逐个获取名称,有没有办法一次搜索列表(没有循环)。
使用HashSet
存储名称并使用contains()
方法。这是 O(1)操作。或者另一个建议是使用Scanner.findWithinHorizon(pattern, horizon)