Javaでディレクトリを指定して、ファイル全体を1つずつ読み取る方法はありますか?
それ以外の場合、Javaで正規表現ファイルを読み取る方法はありますか?したがって、フォルダ内のすべてのファイルがgh001_12312 gh002_12312、gh003_12911、gh004_22222、gh005_xxxxxなどで始まる場合
標準のJavaライブラリは、File#listFilesFile
を介してディレクトリにある要素の配列を取得する方法を提供します。基本的に:
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)
、ファイル名を表す文字列のみを提供するオプションもあります。
commons-ioの以下のメソッドを組み合わせて使用できます。最初の方法では、特定の拡張子に一致するディレクトリ内のすべてのファイルを再帰的に反復処理するオプションが提供されます(独自のフィルターを提供できる別のオーバーロードされた方法があります)。2番目のメソッドは、ファイルの内容全体をStringオブジェクトとして読み取ります。
Iterator<File> iterateFiles(File directory,
String[] extensions,
boolean recursive)
String readFileToString(File file)
throws IOException
ここで@TimBenderのコードを再利用しています:
まず、@ 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を使用してファイルを1回で読み取ります(なし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;
}
この助けを願っています