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

Pengendalian Fail dalam Java: Panduan Komprehensif

Linda Hamilton
Lepaskan: 2024-09-24 14:17:42
asal
283 orang telah melayarinya

File Handling in Java: A Comprehensive Guide

Pengenalan

Pengendalian fail adalah bahagian penting dalam mana-mana bahasa pengaturcaraan. Di Java, pakej java.io dan java.nio menyediakan kelas yang berkuasa untuk membaca dan menulis fail, kedua-dua teks dan binari. Panduan ini merangkumi perkara penting pengendalian fail dalam Java, termasuk contoh, cabaran dan petua untuk membantu anda menguasai topik ini.


1. Membaca dan Menulis Fail Teks

Membaca Fail Teks

Java menyediakan beberapa cara untuk membaca fail teks, tetapi kaedah yang paling biasa dan mudah ialah menggunakan BufferedReader dan FileReader.

Contoh:

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();
        }
    }
}
Salin selepas log masuk

Isi Penting:

  • BufferedReader membaca teks dengan cekap, baris demi baris.
  • Pernyataan cuba-dengan-sumber memastikan sumber ditutup secara automatik.

Menulis Fail Teks

Menulis pada fail teks adalah sama mudahnya menggunakan BufferedWriter dan FileWriter.

Contoh:

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();
        }
    }
}
Salin selepas log masuk

Cabaran: Tulis program Java yang membaca fail teks baris demi baris dan mengira bilangan perkataan dalam fail.


2. Membaca dan Menulis Fail Perduaan

Fail binari memerlukan pendekatan berbeza kerana ia tidak boleh dibaca oleh manusia. Kelas FileInputStream dan FileOutputStream Java sesuai untuk membaca dan menulis data binari.

Membaca Fail Binari

Contoh:

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();
        }
    }
}
Salin selepas log masuk

Isi Penting:

  • FileInputStream membaca bait data satu demi satu.
  • Berguna untuk fail seperti imej atau objek bersiri.

Menulis Fail Perduaan

Contoh:

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();
        }
    }
}
Salin selepas log masuk

Cabaran: Tulis program yang menyalin fail binari (seperti imej) dari satu lokasi ke lokasi lain.


3. Membaca dari Fail ZIP

Pakej java.util.zip Java membolehkan anda bekerja dengan fail ZIP. Anda boleh mengekstrak fail daripada arkib ZIP menggunakan ZipInputStream.

Contoh:

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();
        }
    }
}
Salin selepas log masuk

Isi Penting:

  • ZipInputStream membaca entri daripada fail ZIP.
  • Setiap entri (fail atau direktori) boleh diekstrak menggunakan gelung.

Cabaran: Tulis program Java yang membaca semua fail .txt daripada arkib ZIP dan mencetak kandungannya ke konsol.


4. Menulis ke Fail Pejabat

Java tidak menyokong penulisan pada fail Microsoft Office seperti .docx atau .xlsx secara asli, tetapi perpustakaan seperti Apache POI boleh digunakan untuk tujuan ini.

Menulis ke Fail Excel

Contoh:

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();
        }
    }
}
Salin selepas log masuk

Cabaran: Tulis program Java yang mencipta fail Excel dengan berbilang helaian, setiap satu mengandungi jadual data.


5. Membaca dan Menulis Fail XML

Java menyediakan beberapa cara untuk berfungsi dengan fail XML. Pakej javax.xml.parsers biasanya digunakan untuk ini.

Membaca Fail XML

Contoh:

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();
        }
    }
}
Salin selepas log masuk

Menulis pada Fail XML

Contoh:

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();
        }
    }
}
Salin selepas log masuk

Cabaran: Cipta program Java yang membaca fail konfigurasi XML dan mengeluarkan tetapan dalam format yang boleh dibaca manusia.


6. Pengendalian Pengecualian dalam Fail I/O

Apabila bekerja dengan fail, pengecualian adalah perkara biasa disebabkan oleh isu seperti kehilangan fail, ralat kebenaran atau format data yang tidak dijangka. Pengendalian pengecualian yang betul adalah penting untuk program yang mantap.

Pengecualian I/O Biasa

  • FileNotFoundException: Berlaku apabila cuba membuka fail yang tidak wujud.
  • IOException: Pengecualian umum untuk kegagalan I/O, seperti ralat membaca atau menulis.

Amalan Terbaik:

  • Gunakan cuba-dengan-sumber: Ini memastikan fail ditutup dengan betul walaupun pengecualian berlaku.
  • Blok Tangkapan Khusus: Kendalikan pengecualian berbeza secara berasingan untuk memberikan mesej ralat yang bermakna.
  • Pengelogan: Sentiasa log pengecualian untuk membantu mendiagnosis isu dalam pengeluaran.

Contoh:

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());
        }
    }
}
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan