1. Pengkodean dokumen
Paket com.study.io;/*** Encoding file uji*/kelas publik encodedemo {/*** @param args*@throws Exception*/public static void main (string [] args) melempar pengecualian {string s = "Study ABC well"; byte [] bytes1 = s.getbytes (); ini; Pengkodean proyek (di sini adalah UTF-8) untuk (byte b: bytes1) {// convert byte (ke int) untuk menampilkan system.out.print (integer.tohexstring (b & 0xff)+""); // & 0xff akan menghapus 24 0s pertama dan hanya meninggalkan sistem delapan digit terakhir. byte, dan 1 byte dalam bahasa Inggris */byte [] bytes2 = s.getbytes ("UTF-8"); // Akan ada pengecualian yang ditampilkan di sini, jadi kami melempar pengecualian ini untuk (byte b: bytes2) {System.out.print (integer.toHexString (b & 0xff)+"); byte, dan 1 byte dalam bahasa Inggris */byte [] bytes3 = s.getbytes ("gbk"); // Akan ada pengecualian yang ditampilkan di sini, jadi kita akan melempar pengecualian ini untuk (byte b: bytes3) {System.out.print (integer.toHexString (b & 0xff)+""); menempati 2 byte dan bahasa Inggris menempati 2 byte*/byte [] bytes4 = s.getbytes ("utf-16be"); // akan ada pengecualian yang ditampilkan di sini, jadi kita akan melempar pengecualian ini untuk (byte b: bytes4) {System.out.print (integer.tthexstring (B & 0xFF); Urutan byte adalah pengkodean tertentu, jika Anda ingin mengubah urutan byte menjadi string, Anda juga perlu menggunakan metode pengkodean ini, jika tidak kode yang kacau akan muncul*/string str1 = string baru (bytes4); // Pada saat ini, encoding default proyek akan digunakan untuk dikonversi, dan kode yang dikelupas dapat muncul System.out.println) untuk menggunakan poon -to) untuk memanfaatkannya, dan KODE KONVERT/KONFENSI PERLIAN. str2 = string baru (bytes4, "utf-16be"); system.out.println (str2);}} menganalisa:
* 1. Penjelasan "& 0xff":
* 0xff mewakili hexadecimal (desimal adalah 255), dan dinyatakan sebagai biner, yaitu "111111111".
* Kemudian & karakter mewakili jumlah bit (return 1 bila sama adalah 1, jika tidak kembali 0)
* 2. Byte Byte dan Konversi Jenis Int:
* Integer.tohexstring (b & 0xff) Di sini, b dan 0xff tipe byte pertama kali dilakukan, dan kemudian integer.tohexstring memperoleh string heksadesimal
* Dapat dilihat bahwa hasil B & 0XFF masih merupakan int, jadi mengapa Anda perlu melakukan operasi dengan 0xff? Direct Integer.tohexstring (b);, tidak dapat memaksa byte untuk dikonversi? Jawabannya tidak mungkin.
* Alasannya adalah: 1. Ukuran byte adalah 8 bit dan ukuran int adalah 32 bit; 2. Formulir Komplemen Dua Java
* Parameter integer.tohexstring adalah int. Jika & 0xff tidak dilakukan, maka ketika byte akan dikonversi menjadi int, karena int adalah 32 bit dan byte hanya memiliki 8 bit, itu akan diisi saat ini. . . . . .
* Oleh karena itu, ketika byte dan 0xff terlibat, byte akan dikonversi menjadi operasi plastik terlebih dahulu, sehingga 24 bit tinggi dalam hasil akan selalu dibersihkan oleh 0, jadi hasilnya selalu seperti yang kita inginkan.
* 3.UTF-8 Pengkodean: Cina menempati 3 byte dan bahasa Inggris menempati 1 byte
* Pengkodean GBK: Cina menempati 2 byte dan bahasa Inggris menempati 1 byte
* Java menggunakan pengkodean double-byte (yaitu, satu karakter dalam Java menyumbang dua byte) dan merupakan pengkodean UTF-16BE. Cina menempati 2 byte, bahasa Inggris menempati 2 byte
*
* 4. Ketika urutan byte Anda adalah pengkodean tertentu, jika Anda ingin mengubah urutan byte menjadi string, Anda juga perlu menggunakan metode pengkodean ini, jika tidak kode kacau akan terjadi.
* 5. File teks adalah urutan byte. Ini bisa berupa urutan byte yang dikodekan.
* Jika kami membuat file teks secara langsung di mesin Cina, maka file hanya mengenali pengkodean ANSI (misalnya, buat file teks langsung di komputer)
2. Penggunaan kelas file
Paket com.study.io; import java.io.file;/*** Penggunaan kelas file*/kelas publik FileDeMo {/*java.io.file kelas mewakili file atau direktori. Kelas file hanya digunakan untuk mewakili informasi file atau direktori (nama, ukuran, dll.) Dan tidak dapat digunakan untuk mengakses konten file. */public static void main (string [] args) {file file = file baru ("d: // 111"); // Saat membuat objek file, Anda perlu menggunakan slash ganda untuk menentukan direktori, karena "/" adalah karakter yang baru/pemisah di tengah -tengah yang dapat digunakan dengan pemisah/pemisah/pemisah/pemisah/pemisah yang dapat digunakan dengan slash ganda, backslashes, atau file pemisah/pemisah/pemisah/pemisah/pemisah yang dapat digunakan dengan double slash, backslashes, atau backslashes, atau arsipe. File("d:"+File.separator);// System.out.println(file.exists());//exists() determines whether a file or folder exists if(!file.exists()){//If the file does not exist file.mkdir();//Create a folder mkdir(), and mkdirs() creates a multi-level direktori} else {file.delete (); // hapus file atau folder} // Deteksi apakah itu direktori isdirectory, kembalikan true jika itu direktori, kembalikan falsaesystem.out.println (file.isdirectory ()); // tampilkan apakah itu file isfileSystem.out.printlin.printl. File file2=new File("D://222","123.txt");//Common API: System.out.println(file);//Print the content of file.toString() System.out.println(file.getAbsolutePath());//Get the absolute path System.out.println(file.get Name());//Get the file name System.out.println (file2.getname ()); System.out.println (file.getParent ()); // Dapatkan induk absolute path system.out.println (file2.getParentFile (). GetAbsolutePath ());}}} Hasil Menjalankan:
menjelaskan:
kelas java.io.file mewakili file atau direktori
Kelas file hanya digunakan untuk mewakili informasi (nama, ukuran, dll.) Dari file atau direktori dan tidak dapat digunakan untuk mengakses konten file.
API yang umum digunakan:
1. Buat Objek File: File File = File Baru (Path String); Catatan: file.seperater (); Dapatkan pembatas sistem, seperti: "/".
2. Apakah boolean file.exists (); ada.
3.file.mkdir (); atau file.mkdirs (); Buat direktori atau direktori multi-level.
4.file.isdirectory () menentukan apakah itu direktori
file.isfile () menentukan apakah itu file.
5.file.delete (); hapus file atau direktori.
6.file.createNewFile (); Buat file baru.
7.File.getName () Mendapat nama file atau jalur absolut direktori.
8.file.getAbsolutePath () mendapatkan jalur absolut.
9.file.getParent (); Dapatkan Jalur Mutlak Orangtua.
1. Melintasi Direktori
package com.study.io;import java.io.File;import java.io.IOException;/*** File tool class* Lists common operations of the File class, such as: filtering, traversing, etc.*/public class FileUtils {/*** Lists all files in the specified directory (including its subdirectories)* @param dir* @throws IOException*/public static void ListDirectory (file dir) melempar IoException {if (! dir.exists ()) {// exists () metode digunakan untuk menentukan apakah file atau direktori telah melempar IllegalArgumentException baru ("Dir:"+Dir "tidak ada");} if (! dir.isdirectory (") {" IS NOT//ISDICORY APAKAH (! Dir.isdirectory () {"IS NOT//ISDIRECORY APAKAH (! IllegalArgumentException(dir+"not a directory");}/*String[] fileNames = dir.list();//list() method is used to list the subdirectories and files in the current directory (it is directly the name of the subdirectories and does not contain the contents in the subdirectories), and the string array is returned for (String string: fileNames) {System.out.println (String);}*/// Jika Anda ingin melintasi konten dalam subdirektori, Anda perlu membangun objek file untuk operasi rekursif. File menyediakan apifile yang secara langsung mengembalikan objek file. listFiles = dir.listFiles (); // mengembalikan abstraksi dari subdirektori langsung (file) if (listFiles! = null && listFiles.length> 0) {for (file file: listFiles) {/*system.out.println(file);*/if 1 ListDirectory (file);} else {System.out.println (file);}}}}}} Kelas Tes:
Public Class Fileutilstest {public static void main (string [] args) melempar ioException {fileutils.listDirectory (file baru ("d: // iostudy"));}} Hasil Menjalankan:
3. Penggunaan kelas ACORDACCESSFILE
RandomAccessFile: Java menyediakan akses ke konten file, yang dapat digunakan untuk membaca file atau menulis file.
RandomAccessFile mendukung akses acak ke file dan dapat mengakses setiap lokasi file.
Perhatikan model file java:
Hasil Menjalankan:
1
12
[65, 66, 127, -1, -1, -1, 127, -1, -1, -1, -42, -48]
7f
ff
ff
ff
7f
ff
ff
ff
d6
d0
4. Byte Stream (FileInputStream, FileOutputStream)
Stream IO dapat dibagi menjadi aliran input dan aliran output.
Di sini dapat dibagi menjadi aliran byte dan aliran karakter.
Contoh kode:
Paket com.study.io; import java.io.bufferedInputStream; impor java.iuferedOutputStream; import java.io.file; impor java.io.fileInputStream; import java.io.fileOutputStream; output ❤put ❤put (output ❤put output; Implementasi Data Membaca pada File* FileOutputStream-> Implementasi Metode Penulisan Data Byte ke dalam File* ❤Perat input dan output stream:* DataOutputStream/datainputStream: memperluas fungsi "stream", Anda dapat membaca int, panjang,* Karakter dan Tulisan Lainnya (Long, dan Lainnya* DataOutputstream WriteTint (): BUFFERED: ❤ writed () () ❤ writed () o. ❤ write () (Long BUTDUTE (Long, dan Lainnya* DataOutputstream WriteTint () (): BUFFERED: ❤ BUFFERED () ❤ writed () oVed (Long, dan Lain BufferedInputStream & BufferedOutputStream* Dua bit kelas aliran ini IO menyediakan operasi dengan buffer. Secara umum, saat membuka file untuk menulis atau membaca operasi, buffering akan ditambahkan. This stream mode improves the performance of IO* For example: Putting input into a file from an application is equivalent to pouring a cylinder of water into another cylinder: FileOutputStream--->write() method is equivalent to "transferring" the water over DataOutputStream-->writeXxx() method is more convenient, equivalent to "transferring" the water over BufferedOutputStream--->write method is more convenient, equivalent to Menempatkan sendok ke dalam ember terlebih dahulu (mis., Area penyangga), dan kemudian menuangkannya ke dalam silinder lain dari ember. Kinerja ditingkatkan*/kelas publik ioutil {/*** Baca konten file yang ditentukan dan output ke konsol di hexadecimal* dan setiap 10 byte line break* @param filename* pembacaan byte single tidak cocok untuk file-file besar, dan file yang sangat tidak efisien*/public static printhex (string file string) FileInputStream di = FileInputStream baru (nama file); int b; int i = 1; while ((b = in.read ())! =-1) {/* 0xff diganti dengan sistem 2 digit, yang berarti 8 1s. Dengan cara ini, 8 bit karakter yang lebih rendah sebenarnya diambil. * OXF adalah 15. Angka kurang dari 15 akan dikonversi menjadi angka heksadesimal. * Kode Anda berharap untuk menjadi dua angka heksadesimal yang diperbaiki, jadi ketika hanya satu yang dihasilkan, Anda perlu menambahkan 0*/if (b <= 0xf) {// integer.tohexstring (b) sebelum nomor unit ditambah dengan string 0system. System.out.print (integer.tohexstring (b)+""); if(i++%10==0){System.out.println();}}in.close();//File reading must be closed after reading and writing}/*** Batch reading is efficient for large files and is also the most commonly used way to read files* @param fileName* @throws IOException*/public static void printHexByByteArray(String fileName)throws IoException {fileInputStream in = new FileInputStream (fileName); byte [] buf = byte baru [8* 1024];/* Batch byte dari In dan memasukkannya ke dalam array byte Buf,* Mulai dari posisi ke -0, dan dimasukkan ke sebagian besar Buf.length* pengembalian adalah jumlah byt yang disetel* in.read (buf, 0, buf.length); // baca pada satu waktu, menunjukkan bahwa array byte cukup besar int j = 1; untuk (int i = 0; i <bytes; i ++) {System.out.print (integer.toHexString (buf [i] & 0xff)+""); if (j ++%10 == 0) {System.out.println ();}}*/int bytes = 0; int j = 1; sementara (sementara (); in.read(buf,0,buf.length))!=-1){for(int i = 0; i < bytes;i++){System.out.print(Integer.toHexString(buf[i] & 0xff)+" ");/*** & 0xff:byte type 8 bits, int type 32 bits, in order to avoid data conversion errors, clear the high 24 bits by &0xff*/if(j++%10==0){System.out.println();}}}in.close();}/*** File copy, byte batch read* @param srcFile* @param destFile* @throws IOException*/public static void copyFile(File srcFile, File destFile) throws IOException {if (!srcFile.exists()) {throw new IllegalArgumentException("File:" + srcFile + "Not exist");}if (!srcFile.isFile()) {throw new IllegalArgumentException(srcFile + "not a file");}FileInputStream in = new FileInputStream(srcFile);FileOutputStream out = new FileOutputStream (destfile); // Ketika file tidak ada, itu akan dibuat secara langsung; Jika ada, hapus dan buat byte [] buf = byte baru [8 * 1024]; // batch baca dan tulis int b; while ((b = in.read (buf, 0, buf.length))! = -1) {//read(buf,0,buf.length) Baca dengan parameter mengembalikan total panjang byte; Saat semuanya dibaca adalah -1; out.write (buf, 0, b); out.flush();// It is best to add }in.close();out.close();}/*** to copy the file and use the buffered byte stream* @param srcFile* @param destFile* @throws IOException*/public static void copyFileByBuffer(File srcFile,File destFile)throws IOException{if(!srcFile.exists()){throw new IllegalArgumentException("File:"+srcFile+"Not exist");}if(!srcFile.isFile()){throw new IllegalArgumentException(srcFile+"not a file");}BufferedInputStream bis = new BufferedInputStream(new FileInputStream (srcfile)); bufferedOutputStream bos = baru bufferedOutputStream (FileOutputStream baru (destfile)); int c; while ((c = bis.read ())! =-1) {bos.write (c); bos. Buffering untuk file salinan* @param srcfile* @param destfile* @throws ioException*/public static void copyFileByByte (file srcfile, file destfile) melempar ioException {if (! srcfile.exists ()) {throw no no no no excuMentseption ("srcfile () ada ");} if (! srcfile.isfile ()) {lempar new ilegalargumentException (srcfile+" bukan file ");} fileInputStream in = new FileInputStream (srcfile); fileOutputStream out = new fileOutputStream (destfile); while) (while) (co) (cor-) {) {) {) {{) (cor) (cor) (cor) (cor) (co) (cor. parameter mengembalikan konten byte baca; Ketika semua bacaan semuanya dikembalikan adalah -1; out.write (c); out.flush ();} in.close (); out.close (); out.close ();}} Kelas Tes:
Paket com.study.io; import java.io.file; import java.io.ioexception; impor org.junit.test; kelas publik ioutiltest {@testpublic void testprinthex () {coba {ioutil.printhex ("d: //javaio/fileutil. {E.PrintStackTrace ();}}@testpublic void testPrintHexByTeArray () {coba {long start = system.currentTimeMillis (); // Perbedaan waktu antara waktu saat ini dan tengah malam pada 1 Januari 1970 (diukur dalam milidonds) //Ioutil.printhexbybytearray("e://javaio//fileutils.java");//ioutil.printhex("e://javaio//1.mp3"); iOutil.printhexbybytearray.mp3 end = system.currentTimeMillis (); System.out.println (end - start);} catch (ioException e) {e.printstacktrace ();}}@testpublic void testCopyFile () {try {ioutil.copyfile (file baru ("D: /// ////1), newer. File("d://javaio//1copy.txt"));} catch (IOException e) {e.printStackTrace();}}@Testpublic void testCopyFileByBuffer(){try {long start = System.currentTimeMillis();/*IOUtil.copyFileByByte(new File ("e: //javaio//1.mp3"), file baru ("e: //javaio//2.mp3"));*/// lebih dari 20.000 milliseconds/*ioutil.copyfilebybuffer (file baru ("e: //javaio//1.mp3") ("e: //javaio//1.mp3") ("e: //javaio//1.mp3") ("e: //javaio//1.mp3")) dari 10.000 milidetik*/ioutil.copyfile (file baru ("e: //javaio//1.mp3"), file baru ("e: //javaio//4.mp3")); // 7ms end long = System.currenttimillis (); System.out.println (end -end -end = System.currentTimillis (); System.out.println (end -end -end = System.currentTiMillis (); System.out.println (end - end - end -end); {E.PrintStackTrace ();}}} 5. Aliran Karakter
Paket com.study.io; impor java.io.fileInputStream; impor java.io.fileoutputStream; impor java.io.ioException; import java.io.inputStreamReader; impor java.io. = FileInputStream baru ("e: //javaio//utf8.txt"); inputStreamReader isr = inputStreamReader baru (dalam, "UTF-8"); // Pengkodean proyek default. Saat beroperasi, Anda perlu menulis format pengkodean file itu sendiri. FileOutputStream out = FileOutputStream baru ("e: //javaio//utf81.txt"); outputStreamWriter osw = outputStreamWriter baru (out, "utf-8");/*int c; while ((c = isr.read ()! =-1) {System.out.print ((c = isr.read ()! char [8*1024]; int c;/*batch baca, letakkan array karakter buffer, mulai dari posisi ke -0, dan tempatkan buffer. Paling panjang. Jumlah karakter yang dikembalikan adalah jumlah karakter baca*/while ((c = isr.read (buffer, 0, buffer.length))! =-1) {string s = baru String (buffer, 0, c); System.out.print (s); osw.write (buffer, 0, c); osw.flush ();} isr.close (); osw.close (); osw.close ();}}File membaca dan menulis aliran karakter (filereader/fileWriter)
Filter untuk aliran karakter
6. Serialisasi dan deserialisasi objek
Contoh:
Melihat: