Java でのファイル処理: 総合ガイド

Linda Hamilton
リリース: 2024-09-24 14:17:42
オリジナル
256 人が閲覧しました

File Handling in Java: A Comprehensive Guide

はじめに

ファイル処理は、あらゆるプログラミング言語にとって重要な部分です。 Java では、java.io および java.nio パッケージは、テキストとバイナリの両方のファイルの読み取りと書き込みのための強力なクラスを提供します。このガイドでは、例、課題、このトピックを習得するのに役立つヒントなど、Java でのファイル処理の基本について説明します。


1.テキスト ファイルの読み取りと書き込み

テキスト ファイルの読み取り

Java にはテキスト ファイルを読み取る方法がいくつかありますが、最も一般的で簡単な方法は BufferedReader と FileReader を使用する方法です。

例:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class TextFileReader {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
ログイン後にコピー

キーポイント:

  • BufferedReader はテキストを 1 行ずつ効率的に読み取ります。
  • try-with-resources ステートメントは、リソースが自動的に閉じられるようにします。

テキスト ファイルの書き込み

テキスト ファイルへの書き込みは、BufferedWriter と FileWriter を使用するのと同様に簡単です。

例:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class TextFileWriter {
    public static void main(String[] args) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter("example.txt"))) {
            writer.write("Hello, World!");
            writer.newLine();
            writer.write("This is a text file.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
ログイン後にコピー

課題: テキスト ファイルを 1 行ずつ読み取り、ファイル内の単語数をカウントする Java プログラムを作成します。


2.バイナリ ファイルの読み取りと書き込み

バイナリ ファイルは人間が判読できないため、別のアプローチが必要です。 Java の FileInputStream クラスと FileOutputStream クラスは、バイナリ データの読み取りと書き込みに最適です。

バイナリファイルの読み取り

例:

import java.io.FileInputStream;
import java.io.IOException;

public class BinaryFileReader {
    public static void main(String[] args) {
        try (FileInputStream inputStream = new FileInputStream("example.dat")) {
            int byteData;
            while ((byteData = inputStream.read()) != -1) {
                System.out.print(byteData + " ");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
ログイン後にコピー

キーポイント:

  • FileInputStream はデータを 1 バイトずつ読み取ります。
  • 画像やシリアル化されたオブジェクトなどのファイルに便利です。

バイナリ ファイルの書き込み

例:

import java.io.FileOutputStream;
import java.io.IOException;

public class BinaryFileWriter {
    public static void main(String[] args) {
        try (FileOutputStream outputStream = new FileOutputStream("example.dat")) {
            outputStream.write(65); // Writes a single byte to the file
            outputStream.write(new byte[]{66, 67, 68}); // Writes multiple bytes to the file
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
ログイン後にコピー

課題: バイナリ ファイル (画像など) をある場所から別の場所にコピーするプログラムを作成します。


3. ZIP ファイルからの読み取り

Java の java.util.zip パッケージを使用すると、ZIP ファイルを操作できます。 ZipInputStream を使用して ZIP アーカイブからファイルを抽出できます。

例:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class ZipFileReader {
    public static void main(String[] args) {
        try (ZipInputStream zipStream = new ZipInputStream(new FileInputStream("example.zip"))) {
            ZipEntry entry;
            while ((entry = zipStream.getNextEntry()) != null) {
                System.out.println("Extracting: " + entry.getName());
                FileOutputStream outputStream = new FileOutputStream(entry.getName());
                byte[] buffer = new byte[1024];
                int len;
                while ((len = zipStream.read(buffer)) > 0) {
                    outputStream.write(buffer, 0, len);
                }
                outputStream.close();
                zipStream.closeEntry();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
ログイン後にコピー

キーポイント:

  • ZipInputStream は ZIP ファイルからエントリを読み取ります。
  • 各エントリ (ファイルまたはディレクトリ) は、ループを使用して抽出できます。

課題: ZIP アーカイブからすべての .txt ファイルを読み取り、その内容をコンソールに出力する Java プログラムを作成します。


4. Office ファイルへの書き込み

Java は、.docx や .xlsx などの Microsoft Office ファイルへの書き込みをネイティブにサポートしていませんが、Apache POI などのライブラリをこの目的に使用できます。

Excel ファイルへの書き込み

例:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelFileWriter {
    public static void main(String[] args) {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");

        Row row = sheet.createRow(0);
        Cell cell = row.createCell(0);
        cell.setCellValue("Hello, Excel!");

        try (FileOutputStream outputStream = new FileOutputStream("example.xlsx")) {
            workbook.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
ログイン後にコピー

課題: 各シートにデータのテーブルが含まれる複数のシートを含む Excel ファイルを作成する Java プログラムを作成します。


5. XML ファイルの読み取りと書き込み

Java には、XML ファイルを操作するためのいくつかの方法が用意されています。これには、javax.xml.parsers パッケージが一般的に使用されます。

XML ファイルの読み取り

例:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

import java.io.File;

public class XMLFileReader {
    public static void main(String[] args) {
        try {
            File file = new File("example.xml");
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(file);

            NodeList nodeList = doc.getElementsByTagName("tagname");
            for (int i = 0; i < nodeList.getLength(); i++) {
                System.out.println(nodeList.item(i).getTextContent());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
ログイン後にコピー

XML ファイルへの書き込み

例:

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

import java.io.File;

public class XMLFileWriter {
    public static void main(String[] args) {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.newDocument();

            Element root = doc.createElement("root");
            doc.appendChild(root);

            Element child = doc.createElement("child");
            child.appendChild(doc.createTextNode("Hello, XML!"));
            root.appendChild(child);

            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");

            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new File("example.xml"));

            transformer.transform(source, result);
        } catch (ParserConfigurationException | TransformerException e) {
            e.printStackTrace();
        }
    }
}
ログイン後にコピー

課題: XML 構成ファイルを読み取り、人間が読める形式で設定を出力する Java プログラムを作成します。


6.ファイル I/O での例外処理

ファイルを操作する場合、ファイルの欠落、権限エラー、予期しないデータ形式などの問題により、例外が発生することがよくあります。適切な例外処理は、堅牢なプログラムにとって不可欠です。

一般的な I/O 例外

  • FileNotFoundException: 存在しないファイルを開こうとすると発生します。
  • IOException: 読み取りエラーや書き込みエラーなどの I/O エラーの一般的な例外。

ベストプラクティス:

  • try-with-resources を使用します: これにより、例外が発生した場合でもファイルが適切に閉じられるようになります。
  • 特定の Catch ブロック: 意味のあるエラー メッセージを提供するために、さまざまな例外を個別に処理します。
  • ログ: 本番環境の問題の診断に役立つように、常に例外をログに記録します。

例:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileExceptionHandling {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.err.println("An I/O error occurred: " + e.getMessage());
        }
    }
}
ログイン後にコピー

Conclusion

File handling in Java is a powerful feature, enabling you to work with various file types, from simple text files to complex XML and binary files. By mastering these techniques, you'll be well-equipped to handle any file-based tasks in your Java applications.

Final Challenge: Combine reading and writing techniques to create a program that reads data from an Excel file, processes it, and then writes the results to a new XML file.


Tips & Tricks:

  • Buffering: Always use buffering (BufferedReader, BufferedWriter) for large files to improve performance.
  • File Paths: Use Paths and Files classes from java.nio.file for more modern and flexible file handling.
  • UTF-8 Encoding: Always specify character encoding when dealing with text files to avoid encoding issues.

Happy coding!


以上がJava でのファイル処理: 総合ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!