Javaでフォルダ内のすべてのファイルを1つのファイルに読み込む方法
java.io.FileクラスのlistFiles()メソッドは、そのFileオブジェクトが示すパスに含まれるすべてのファイルおよびディレクトリの抽象パス名(Fileオブジェクト)を要素とする配列を返します。このメソッドを使えば、フォルダ内の全ファイルを簡単に列挙できます。
フォルダ内のすべてのファイルの内容を1つのファイルに読み込むには、以下の手順を実行します。
- 対象フォルダのパスを引数に渡してFileオブジェクトを生成する
- Scannerなどのリーダーを使って各ファイルの内容を1行ずつ読み込む
- 読み込んだ内容をStringBufferに順次追加する
- 最後にStringBufferの内容を出力先のファイルに書き込む
サンプルコード
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class Test {
public static void main(String args[]) throws IOException {
// ディレクトリを表すFileオブジェクトを生成
File directoryPath = new File("D:\\SampleDirectory");
// フォルダ内の全ファイルとディレクトリを取得
File filesList[] = directoryPath.listFiles();
System.out.println("指定されたディレクトリ内のファイルとディレクトリの一覧:");
StringBuffer sb = new StringBuffer();
for (File file : filesList) {
System.out.println("ファイル名: " + file.getName());
System.out.println("ファイルパス: " + file.getAbsolutePath());
System.out.println("サイズ: " + file.length() + " バイト");
// Scannerでファイルの内容を1行ずつ読み込む
Scanner sc = new Scanner(file);
while (sc.hasNextLine()) {
sb.append(sc.nextLine()).append(" ");
}
sc.close();
System.out.println("ファイルの内容: " + sb.toString());
System.out.println(" ");
}
// 出力ファイル用のストリームを生成
FileOutputStream fileOut = new FileOutputStream("D:\\output.txt");
DataOutputStream outputStream = new DataOutputStream(fileOut);
// 読み込んだ全データを出力ストリームに書き込む
outputStream.write(sb.toString().getBytes());
outputStream.flush();
outputStream.close();
System.out.println("すべてのデータが出力ファイルに書き込まれました");
}
}
実行結果
指定されたディレクトリ内のファイルとディレクトリの一覧:
ファイル名: sample1.txt
ファイルパス: D:\SampleDirectory\sample1.txt
サイズ: 17 バイト
ファイルの内容: sample text file1
ファイル名: sample2.txt
ファイルパス: D:\SampleDirectory\sample2.txt
サイズ: 17 バイト
ファイルの内容: sample text file1 sample text file2
ファイル名: sample3.txt
ファイルパス: D:\SampleDirectory\sample3.txt
サイズ: 17 バイト
ファイルの内容: sample text file1 sample text file2 sample text file3
すべてのデータが出力ファイルに書き込まれました
実装のポイント
- StringBufferはスレッドセーフなクラスです。マルチスレッドで共有しない場合は、より高速なStringBuilderの使用を検討しましょう。
- Scannerやストリームはtry-with-resources構文で生成すると、自動的にクローズされ、リソースリークを防げます。
- listFiles(FilenameFilter)のようにフィルタを渡せば、「.txtファイルのみ」など特定の条件に合致するファイルだけを対象にできます。
- ファイル自体のサイズ(バイト数)を取得するにはfile.length()を使用します。getTotalSpace()はパーティション全体の容量を返すため、ファイルサイズの表示には不向きです。
なお、Java 7以降では書き込み処理をNIOのFiles.write()を使って次の1行に置き換えることも可能です。
Files.write(Paths.get("D:\\output.txt"), sb.toString().getBytes());
-
JavaでJSONファイルを作成する方法をわかりやすく解説
JSON(JavaScript Object Notation)は、人間が読みやすい形式でデータを交換するために設計された、軽量なテキストベースのオープン標準フォーマットです。JSONの記法は、C、C++、Java、Python、Perlなど、多くのプログラミング言語に精通したプログラマーにとって馴染み深いものとなっています。 JSONドキュメントのサンプル 以下は、書籍情報を格納した典型的なJSONドキュメントの例です。 { book: [ { id: 01, language: Java, ed
-
Pandasでディレクトリ内のすべてのExcelファイルをDataFrameとして読み込む方法
はじめに フォルダ内に保存された複数のExcelファイルをまとめて読み込み、PandasのDataFrameとして扱いたい場面はよくあります。そんなときに便利なのが、Python標準ライブラリのglobモジュールと、Pandasのread_excel()メソッドを組み合わせる方法です。 ここでは、デスクトップ上に以下の2つのExcelファイルが保存されているケースを例に解説します。 Sales1.xlsx Sales2.xlsx 手順1:Excelファイルが保存されているパスを指定する まず、Excelファイルが置かれているフォルダのパスを設定します。そのうえで、glob.glob()に「