Rumah  >  Artikel  >  Java  >  Analisis contoh input dan output I/O dalam Java

Analisis contoh input dan output I/O dalam Java

WBOY
WBOYke hadapan
2023-05-13 15:40:061456semak imbas

    Prakata

    Data yang disimpan dalam pembolehubah, tatasusunan dan objek adalah sementara dan akan hilang selepas program tamat. Untuk dapat menyimpan data yang dicipta secara kekal, ia perlu disimpan dalam fail cakera supaya ia boleh digunakan dalam atur cara lain. Teknologi I/O Java boleh menyimpan data ke dalam fail teks, fail binari dan juga fail mampat ZIP, memenuhi keperluan untuk penyimpanan data kekal. Menguasai teknologi pemprosesan I/O boleh meningkatkan keupayaan pemprosesan data.

    1. Gambaran keseluruhan strim

    Strim ialah satu set urutan data tersusun, mengikut jenis operasi, ia boleh dibahagikan kepada dua jenis: aliran input dan aliran keluaran. Aliran I/O (Input/Output) menyediakan program saluran yang boleh digunakan untuk menghantar urutan bait dari sumber ke destinasi. Walaupun aliran I/O biasanya dikaitkan dengan akses fail cakera, sumber dan destinasi program juga boleh menjadi papan kekunci, tetikus, memori atau tetingkap monitor.
    Java mengendalikan mod input/output mengikut aliran data Program membaca data dalam sumber dari aliran input yang menunjuk ke sumber Sumber boleh menjadi fail, rangkaian, pakej termampat atau sumber data lain.
    Strim output menghala ke destinasi di mana data hendak dicapai, dan program menghantar maklumat ke destinasi dengan menulis data ke strim output.

    2. Aliran Input/Output

    Bahasa Java mentakrifkan banyak kelas yang bertanggungjawab secara khusus untuk pelbagai bentuk input/output kelas tersebut diletakkan dalam pakej java.io. Antaranya, semua kelas aliran input ialah subkelas kelas abstrak InputStream (aliran input bait) atau Pembaca kelas abstrak (aliran input aksara dan semua aliran keluaran ialah OutputStream kelas abstrak (aliran output bait) atau Penulis kelas abstrak ( Subkelas aksara); aliran keluaran).

    1. Strim Input

    Kelas InputStream ialah kelas abstrak strim input bait dan kelas induk bagi semua strim input bait. Hierarki khusus kelas InputStream adalah seperti berikut.
    Semua kaedah dalam kelas ini akan membuang IOException apabila menghadapi ralat. Di bawah ialah penerangan ringkas tentang beberapa kaedah dalam kelas ini.

    kaedah baca(): Baca bait data seterusnya daripada strim input. Mengembalikan nilai bait int dalam julat 0-255. Jika tiada bait tersedia kerana penghujung strim telah dicapai, nilai pulangan ialah -1.
    baca(bait[] b): Baca panjang tertentu bait daripada aliran input dan kembalikan bilangan bait dalam bentuk integer.
    kaedah mark(int readlimit): Letakkan tanda pada kedudukan semasa aliran input Parameter had baca memberitahu aliran input ini bilangan bait yang dibenarkan untuk dibaca sebelum kedudukan tanda tamat.
    kaedah reset(): Kembalikan penuding input kepada tanda semasa.
    kaedah langkau(long n): melangkau n bait pada aliran input dan mengembalikan bilangan bait sebenar yang dilangkau.
    kaedah markSupported(): Mengembalikan benar jika strim semasa menyokong operasi mark()/reset().
    kaedah tutup: Tutup strim input ini dan lepaskan semua sumber sistem yang dikaitkan dengan strim ini.

    Aksara dalam Java dikodkan Unikod dan bait berganda. InputStream digunakan untuk memproses bait dan tidak sesuai untuk memproses teks aksara. Java menyediakan set kelas Pembaca yang berasingan khusus untuk input teks aksara Walau bagaimanapun, kelas Pembaca bukan pengganti untuk kelas InputStream Ia hanya memudahkan pengaturcaraan semasa memproses rentetan. Kelas Pembaca ialah kelas abstrak aliran input aksara, dan semua pelaksanaan aliran input aksara ialah subkelasnya.

    Kaedah dalam kelas Pembaca adalah serupa dengan kaedah dalam kelas InputStream Pembaca boleh menyemak dokumentasi JDK apabila diperlukan.

    2. Aliran keluaran

    Kelas OutputStream ialah kelas abstrak bagi aliran keluaran bait ini ialah kelas super bagi semua kelas yang mewakili aliran bait keluaran.
    Semua kaedah dalam kelas OutputStream mengembalikan batal, dan IoException dilemparkan apabila ralat ditemui. Berikut adalah pengenalan ringkas kepada kaedah dalam kelas OutputStream.

    kaedah tulis(int b): Tulis bait yang ditentukan pada aliran keluaran ini.
    kaedah tulis(bait[] b): Tulis b bait daripada tatasusunan bait yang ditentukan kepada aliran keluaran ini. Kaedah
    write(bait[] b, int off, int len): Tulis bait len ​​bermula daripada offset off dalam tatasusunan bait yang ditentukan ke strim output ini.
    kaedah flush(): lengkapkan output sepenuhnya dan kosongkan kawasan penimbal.
    kaedah tutup(): tutup aliran keluaran.

    3. Kelas fail

    Kelas Fail ialah satu-satunya objek dalam pakej java.io yang mewakili fail cakera itu sendiri. Kelas Fail mentakrifkan beberapa kaedah bebas platform untuk mengendalikan fail Anda boleh mencipta, memadam, menamakan semula fail dan operasi lain dengan memanggil kaedah dalam kelas Fail. Objek kelas Fail digunakan terutamanya untuk mendapatkan beberapa maklumat tentang fail itu sendiri, seperti direktori tempat fail terletak, panjang fail, kebenaran membaca dan menulis fail, dsb. Strim data boleh menulis data ke fail, dan fail juga merupakan media data yang paling biasa digunakan untuk aliran data.

    1. Penciptaan dan pemadaman fail

    Anda boleh menggunakan kelas Fail untuk mencipta objek fail. 3 kaedah pembinaan berikut biasanya digunakan untuk mencipta objek fail.

    1. Fail(Nama laluan rentetan)

    Pembina ini mencipta tika Fail baharu dengan menukar rentetan nama laluan yang diberikan kepada nama laluan abstrak.

    Sintaks adalah seperti berikut:

    Fail baharu(Nama laluan rentetan);

    Di mana nama laluan menentukan nama laluan (termasuk nama fail). Contohnya:

    Fail fail = Fail baharu(“d:/1.txt”);

    2. Fail(Induk rentetan, anak rentetan)

    Pembina ini mencipta objek Fail baharu berdasarkan rentetan laluan induk dan laluan anak (termasuk nama fail).

    Sintaks adalah seperti berikut:

    Fail baharu(String parent,String child);

    3.

    Pembina ini mencipta tika Fail baharu berdasarkan nama laluan abstrak Induk dan rentetan nama laluan anak.

    Sintaks adalah seperti berikut:

    Fail baharu(Fail f,String child);

    2. Dapatkan maklumat fail

    Kelas fail Menyediakan banyak kaedah untuk mendapatkan beberapa maklumat tentang fail itu sendiri. Seperti yang ditunjukkan dalam jadual berikut

    Kaedah | Nilai pulangan

    ------- | daripada fail
    canReda()|. Tentukan sama ada fail itu boleh dibaca
    canWrite()| Tentukan sama ada fail itu boleh ditulis
    keluar()|boolean | >length()|long |. Dapatkan panjang fail (dalam bait)
    getAbsolutePath() | Dapatkan laluan mutlak fail
    getParent() | 🎜>isFile() |. Hakim Sama ada fail itu wujud
    isDirectory() | Tentukan sama ada fail itu adalah direktori
    isHidden() | () |. panjang |. Dapatkan masa pengubahsuaian terakhir fail


    4. Strim input/output fail

    Semasa menjalankan program, kebanyakan data dikendalikan dalam memori apabila program tamat atau ditutup, data ini akan hilang. Jika anda perlu menyimpan data secara kekal, anda boleh menggunakan aliran input/output fail untuk mewujudkan sambungan dengan fail yang ditentukan dan menyimpan data yang diperlukan pada fail secara kekal.

    1. Kelas FillInputStream dan FileOutputStream

    kelas FileInputStream dan kelas FileOUTputStream kedua-duanya digunakan untuk mengendalikan fail cakera. Jika keperluan membaca fail pengguna agak mudah, anda boleh menggunakan kelas FileInputString, yang mewarisi daripada kelas InputString. Kelas FileOutputStream sepadan dengan kelas FileInputStream dan menyediakan keupayaan menulis fail asas. Kelas FileOutputStream ialah subkelas kelas OutputStream.

    Kaedah pembinaan yang biasa digunakan bagi kelas FileInputStream adalah seperti berikut:

    FileInputStream(String name)

    FileInputStream(File file)

    2 dan kelas FileWriter


    Menggunakan kelas FileOutputStream untuk menulis data pada fail dan menggunakan kelas FileInputStream untuk membaca kandungan daripada fail mempunyai satu kelemahan, iaitu, kedua-dua kelas hanya menyediakan kaedah untuk membaca bait atau tatasusunan bait. Memandangkan Hanzi menduduki dua bait dalam fail, jika anda menggunakan aliran bait, aksara bercelaru mungkin muncul jika bacaan tidak baik Dalam kes ini, menggunakan kelas Pembaca atau Penulis aliran aksara boleh mengelakkan fenomena ini.

    Strim aksara FileReader dan FileWriter sepadan dengan kelas FileInputStream dan FileOutputStream. Strim FileReader membaca fail secara berurutan Selagi strim tidak ditutup, setiap panggilan ke kaedah read() membaca secara berurutan kandungan sumber yang lain sehingga akhir sumber atau strim ditutup.

    5. Strim Input/output dengan cache

    Cache ialah pengoptimuman prestasi I/O. Strim cache menambah kawasan cache memori pada strim I/O. Dengan kawasan penimbal, adalah mungkin untuk melaksanakan kaedah langkau(), mark() dan set semula() pada strim.

    1. Kelas BufferedInputStream dan BufferedOutputStream

    Kelas BufferedInputStream boleh membalut semua kelas InputStream dengan penimbal untuk mengoptimumkan prestasi. Kelas BufferedInputStream mempunyai dua kaedah pembinaan:

    BufferedInputStream(InputStream in)

    BufferedInputStream(InputStream in, saiz int)

    Kaedah pembinaan pertama mencipta A 3 -byte buffer Kaedah pembinaan kedua mencipta penimbal dengan saiz yang ditentukan.


    2. Kelas BufferedReader dan BufferedWriter

    Kelas BufferedReader dan kelas BufferedWriter masing-masing mewarisi kelas Reader dan Writer. Kedua-dua kelas juga mempunyai mekanisme caching dalaman dan boleh melakukan input/output dalam unit baris.

    6. Strim input/output data

    Strim input/output data (kelas DataInputStream dan kelas DataOutputStream) membenarkan aplikasi membaca data Java asas daripada aliran input asas dalam jenis cara bebas mesin . Dalam erti kata lain, apabila membaca sekeping data, anda tidak perlu lagi bimbang tentang jenis bait nilai yang sepatutnya.

    7. Strim input/output mampatan ZIP

    Fail pengurusan mampatan ZIP (arkib ZIP) ialah bentuk pemampatan fail yang sangat tipikal, yang boleh menjimatkan ruang storan. Mengenai pelaksanaan I/O pemampatan ZIP, kelas terbina dalam Java menyediakan kelas berkaitan yang sangat berguna, jadi pelaksanaannya sangat mudah. Bahagian ini akan memperkenalkan penggunaan kelas ZipOutputStream dan ZipInputStream dalam pakej java.util.zip untuk mencapai pemampatan/penyahmampatan fail. Jika anda ingin membaca fail daripada fail pengurusan mampat ZIP, anda mesti mencari "titik masuk direktori" fail yang sepadan terlebih dahulu (dari mana anda boleh mengetahui lokasi fail dalam fail ZIP) sebelum anda boleh membaca kandungan daripada fail tersebut. Jika anda ingin menulis kandungan fail ke dalam fail ZIP, anda mesti terlebih dahulu menulis "titik masuk direktori" yang sepadan dengan fail dan alihkan lokasi di mana kandungan fail hendak ditulis ke lokasi yang ditunjukkan oleh titik masuk ini, dan kemudian tulis kandungan fail.

    Java实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解压缩的实现比较容易。ZipEntry类产生的对象,是用来代表一个ZIP压缩文件内的进入点(entry)。ZipInputStream用来写出ZIP压缩格式的文件,所支持的包括已压缩及未压缩的进入点(entry)。

    ZipOutputStream类用来写出ZIp压缩格式的文件,而且所支持的包括已压缩及未压缩的进入点(entry)。下面介绍利用ZipEntry、

    ZipInputStream和ZipOutputStream3个Java类实现ZIP数据压缩方式的编程方法。

    1、压缩文件

    利用ZipOutputStream类对象,可将文件压缩为.zip文件。ZipOutputStream类的构造方法如下:

    ZipOutputStram(OutputStream out);

    ZipOutputStream类的常用方法如表所示:

    方法 返回值 说明
    putNextEntry(ZipEntry e) void 开始写一个新的ZipEntry,并将流内的位置移至此entry所指数据的开头
    write(byte[] b,int off,int len) void 将字节数组写入当前ZIP条目数据
    finish() void 完成写入ZIP输出流的内容,无须关闭它所配合的OutputStream
    setComment(String comment) void 可设置此ZIP文件的注释文字

    2、解压缩ZIP文件

    ZipInputStream类可读取ZIP压缩格式的文件,包括已压缩和未压缩的条目(entry)。ZipInputStream类的构造方法如下:

    ZipInputStream(InputStream in)

    ZipInputStream类的常用方法如下表所示:

    方法 返回值 说明
    read(byte[] b, int off , int len) int 读取目标b数组内off偏移量的位置,长度是len字节
    available() int 判断是否已读完目前entry所指定的数据。已读完返回0,否则返回1
    closeEntry() void 关闭当前ZIP条目并定位流以读取下一个条目
    skip(long n) long 跳过当前ZIP条目中指定的字节数
    getNextEntry() ZipEntry 读取下一个ZipEntry,并将流内的位置移至该entry所指数据的开头
    createZipEntry(String name) ZipEntry 以指定的name参数新建一个ZipEntry对象

    补充:获取目录下的所有目录和文件

    示例:假设目录“D:\TestDir1”下有两个文件夹(dir1 和 dir2)和一个文件 file1.txt 。

    File[] listFiles()方法:获取该目录下的所有子目录和文件,返回File类数组。

    import java.io.File;
     
    /**
     * 获取目录下的所有目录和文件
     * @author pan_junbiao
     **/
    public class DirFileTest
    {
        public static void main(String[] args)
        {
            File file = new File("D:\\TestDir1");
     
            //判断目录是否存在
            if (!file.exists())
            {
                System.out.println("目录不存在");
                return;
            }
     
            //获取文件数组
            File[] fileList = file.listFiles();
            for (int i = 0; i < fileList.length; i++)
            {
                //判断是否为目录
                if (fileList[i].isDirectory())
                {
                    System.out.println("目录:" + fileList[i].getName());
                }
                else
                {
                    System.out.println("文件:" + fileList[i].getName());
                }
            }
        }
    }

    执行结果:

    Analisis contoh input dan output I/O dalam Java

    Atas ialah kandungan terperinci Analisis contoh input dan output I/O dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam