在Java中是否有一种方法可以在java中指定目录并逐个读取整个文件?
否则有没有办法在java中读取正则表达式文件?因此,如果文件夹中的所有文件都以gh001_12312 gh002_12312,gh003_12911,gh004_22222,gh005_xxxxx等开头
答案 0 :(得分:5)
标准Java库提供了一种通过File#listFiles获取目录中File
元素数组的方法。
基本上是:
File theDirectory = new File("/home/example");
File[] children = theDirectory.listFiles();
此外,还有一个重载方法允许指定过滤器,该过滤器可用于修剪列表中返回的元素。
File theDirectory = new File("/home/example");
File[] children = theDirectory.listFiles(new FileFilter(){
public boolean accept(File file) {
if (file.isFile()) {
//Check other conditions
return true;
}
return false;
}
});
如果您想根据文件名进行一些过滤,请查看String,Pattern和Matcher。如果您知道只有文件或文件将遵循某个命名约定,那么还有一个File.listFiles(FilenameFilter)
选项,它们只提供表示文件名的字符串。
答案 1 :(得分:3)
您可以使用commons-io中以下方法的组合。第一种方法为您提供了迭代遍历目录中所有文件的选项,这些文件与特定扩展名匹配(有另一种重载方法允许您提供自己的过滤器)。第二种方法将文件的全部内容作为String对象读取。
Iterator<File> iterateFiles(File directory,
String[] extensions,
boolean recursive)
String readFileToString(File file)
throws IOException
答案 2 :(得分:1)
我在这里重用@Tim Bender的代码:
首先获取所有所需文件的列表,如@Tim Bender所示(此处再次显示完整性)。并且不需要第三方库。
File theDirectory = new File("/home/example");
File[] children = theDirectory.listFiles(new FileFilter(){
public boolean accept(File file) {
if (file.isFile()) {
//Check other conditions
return true;
}
return false;
}
});
现在迭代这个数组并使用java.nio
API一次性读取文件(不含br.readLine()
)
public StringBuilder readReplaceFile(File f) throws Exception
{
FileInputStream fis = new FileInputStream(f);
FileChannel fc = fis.getChannel();
int sz = (int)fc.size();
MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz);
CharBuffer cb = decoder.decode(bb);
StringBuilder outBuffer = new StringBuilder(cb);
fc.close();
return outBuffer;
}
希望这个帮助