Rumah  >  Artikel  >  Java  >  Pengendalian Fail dalam Java: Panduan Komprehensif

Pengendalian Fail dalam Java: Panduan Komprehensif

Linda Hamilton
Linda Hamiltonasal
2024-09-24 14:17:42171semak imbas

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!


Atas ialah kandungan terperinci Pengendalian Fail dalam Java: Panduan Komprehensif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn