1. Dokumentcodierung
Paket com.study.io;/*** Testerdatei codieren*/public class codedemo {/*** @param args* @throws Exception*/public static void main (String [] args) Ausnahme Ausnahme {String S = "Study ABC Well"; byte [] bytes1 = S. des Projekts (hier ist UTF-8) für (Byte b: bytes1) {// Bytes (in int) um System umwandeln. byte in englisch */byte [] bytes2 = s.getBytes ("utf-8"); // Es wird eine Ausnahme hier angezeigt, also werfen wir diese Ausnahme für (Byte b: bytes2) {System.out.print (Integer.Tohexstring (B & 0xff)+"). In Englisch */byte [] bytes3 = s.getBytes ("gbk"); // Es wird eine Ausnahme hier angezeigt, sodass wir diese Ausnahme für (Byte B: bytes3) {System.out.print (Integer.Tohexstring (B & 0xff)+"); 2 Bytes*/byte [] bytes4 = s.getBytes ("utf-16be"); // Es wird eine Ausnahme hier angezeigt, also werfen wir diese Ausnahme für (Byte B: bytes4) {System.out.Out.print (Integer.tohexstring (B & 0xff)+"). Wenn Sie die Byte -Sequenz in eine Zeichenfolge verwandeln möchten, müssen Sie diese Codierungsmethode auch verwenden, ansonsten wird der verstümmelte Code erscheint*/String str1 = new String (Bytes4); // Zu diesem Zeitpunkt wird die Standard -Codierung des Projekts verwendet, um konvertieren zu können. String (bytes4, "utf-16be"); System.out.println (str2);}} analysieren:
* 1. Erläuterung von "& 0xff":
* 0xff repräsentiert Hexadezimal (Dezimal ist 255) und wird als binär ausgedrückt, das "111111111" ist.
* Dann repräsentiert das & Zeichen die Anzahl der Bits (Rückgabe 1, wenn dieselbe 1 ist, ansonsten return 0)
* 2. Byte -Byte- und Int -Typ -Konvertierung:
* Integer.tohexString (B & 0xff) hier werden zuerst durchgeführt, b und 0xff des Byte -Typs und dann Integer.ToHexString erhält die hexadezimale Zeichenfolge
* Es ist ersichtlich, dass das Ergebnis von B & 0xff immer noch ein int ist. Warum müssen Sie also eine Operation mit 0xff durchführen? Direkte Integer.TohexString (b);, kann Byte nicht erzwingen, int umgewandelt zu werden? Die Antwort ist nicht möglich.
* Der Grund ist: 1.Byte Größe beträgt 8 Bit und die Größe von INT beträgt 32 Bit; 2. Javas zwei ergänzende Formulare
* Der Parameter der Ganzzahl.TohexString ist int. Wenn & 0xff nicht durchgeführt wird, wird ein Byte in INT konvertiert, da INT 32 Bit beträgt und das Byte nur 8 Bit hat, es wird zu diesem Zeitpunkt gefüllt. . . . . .
* Wenn also ein Byte und 0xff beteiligt sind, wird das Byte zuerst in eine plastische Chirurgie umgewandelt, so dass die hohen 24 -Bits im Ergebnis immer durch 0 gelöscht werden, sodass das Ergebnis immer das ist, was wir wollen.
* 3.UTF-8-Codierung: Chinesisch besetzt 3 Bytes und Englisch ein BYTE. 1 Byte belegt
* GBK -Codierung: Chinesen besetzt 2 Bytes und Englisch ein BYTE 1 Byte
* Java verwendet Doppel-Byte-Codierung (dh ein Zeichen in Java berücksichtigt zwei Bytes) und ist UTF-16BE-Codierung. Chinesisch besetzt 2 Bytes, Englisch belegt 2 Bytes
*
* 4. Wenn Ihre Byte -Sequenz eine bestimmte Codierung ist, müssen Sie diese Codierungsmethode auch verwenden, wenn Sie die Byte -Sequenz in eine Zeichenfolge verwandeln möchten, ansonsten treten auf.
* 5. Textdateien sind Byte -Sequenzen. Es kann jede codierte Sequenz von Bytes sein.
* Wenn wir eine Textdatei direkt auf einer chinesischen Maschine erstellen, erkennt die Datei nur die ANSI -Codierung (z. B. erstellen Sie eine Textdatei direkt auf dem Computer).
2. Verwendung der Dateiklasse
Paket com.study.io; import java.io.file;/*** Verwendung der Dateiklasse*/öffentliche Klasse fileDeMo {/*java.io.file -Klasse repräsentiert eine Datei oder ein Verzeichnis. Die Dateiklasse wird nur zur Darstellung der Informationen einer Datei oder eines Verzeichnisses (Name, Größe usw.) verwendet und kann nicht zum Zugriff auf den Dateiinhalt verwendet werden. */public static void main(String[] args) {File file=new File("D://111");// When creating a file object, you need to use double slashes to specify the directory, because "/" is an escape character/* The separator in the middle of the directory can be used with double slashes, backslashes, or File.separator to set the separator*/// File file1=new Datei ("D:"+file.separator); // system.out.println (file.exists ()); // exists () bestimmt, ob eine Datei oder ein Ordner vorhanden ist, wenn (! Datei.exists ()) {// Wenn die Datei keine Datei existiert. Verzeichnis} else {file.delete (); // eine Datei oder einen Ordner löschen} // Erkennen Sie, ob es sich um ein Verzeichnis isDirectory handelt, true, wenn es sich um ein Verzeichnis handelt, retektieren Sie falesystem.out.println (isdirectory ()); // Zeigen Sie, ob es sich um eine Datei handelt. Datei Datei2 = Neue Datei ("d: // 222", "123.txt"); // Common API: System.out.println (Datei); // Drucken Sie den Inhalt von Datei.toString () system.out.println (Datei.GetabsolUTEPath (); // das Absolute -Path -System.Out.Println (Datei -Datei. -Datei -Name (); // Die Dateiname erhalten. System.out.println (File2.getName ()); System.out.println (File.getParent ()); // Holen Sie sich das übergeordnete Absolute -Path -System. Auslaufergebnisse:
veranschaulichen:
Java.io.file Class repräsentiert eine Datei oder ein Verzeichnis
Die Dateiklasse wird nur zur Darstellung von Informationen (Name, Größe usw.) einer Datei oder eines Verzeichnisses verwendet und kann nicht zum Zugriff auf Dateiinhalte verwendet werden.
Häufig verwendete APIs:
1. Erstellen Sie ein Dateiobjekt: Datei Datei = neue Datei (String -Pfad); Hinweis: File.Serater (); Holen Sie sich das System Grenzwert, wie z. B. "/".
2. ob boolean File.exists (); existiert.
3.File.mkdir (); oder file.mkdirs (); Erstellen Sie ein Verzeichnis oder ein Multi-Level-Verzeichnis.
4. Datei.isDirectory () bestimmt, ob es sich um ein Verzeichnis handelt
Datei.isfile () bestimmt, ob es sich um eine Datei handelt.
5.File.delete (); Datei oder Verzeichnis löschen.
6.File.CreateNewFile (); Erstellen Sie eine neue Datei.
7.File.getName () erhält den Dateinamen oder den Absolute -Pfad des Dateinamens.
8.File.getabsolutepath () erhält den absoluten Weg.
9.file.getParent (); Holen Sie sich den absoluten Pfad der Eltern.
1. Durchqueren Sie das Verzeichnis
Paket com.study.io; import java.io.file; import Java.io.ioxception;/*** Datei -Tool -Klasse*Listet gemeinsame Operationen der Dateiklasse auf, wie z. ListDirectory (Datei Dir) löscht die IOException {if (! Dir.Exists ()) {// exist (), um zu bestimmen, ob eine Datei oder ein Verzeichnis neu verurteilt hat. IllegalArgumentException (Dir+"kein Verzeichnis");}/*string [] fileNames = dir.list (); // list () wird verwendet, um die Unterverhandlungen und Dateien im aktuellen Verzeichnis aufzulisten (es ist direkt der Name der Unterverzeichnisse und nicht die Inhalte in den SubDirectories), und das String -Array wird für die String -String zurückgegeben. {System.out.println (String);}*/// Wenn Sie den Inhalt im Unterverzeichnis durchqueren möchten, müssen Sie das Dateiobjekt für rekursive Operationen konstruieren. Datei bietet ein Apifile, das das Dateiobjekt direkt zurückgibt. listFiles = dir.Listfiles (); // Gibt eine Abstraktion des direkten Unterverzeichnisses (Datei) zurück (ListFiles! ListDirectory (Datei);} else {System.out.println (Datei);}}}}}} Testklasse:
public class Fileutilstest {public static void main (String [] args) löst IOException {FileUtils.ListDirectory (neue Datei ("d: // iostudy");}} aus Auslaufergebnisse:
3. Verwendung der RandomAccessfile -Klasse
RandomAccessFile: Java bietet Zugriff auf Dateiinhalte, mit denen Dateien gelesen oder Dateien geschrieben werden können.
RandomAccessFile unterstützt den Zufallszugriff auf Dateien und kann auf einen beliebigen Speicherort der Datei zugreifen.
Beachten Sie das Java -Dateimodell:
Auslaufergebnisse:
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)
IO -Streams können in Eingangsströme und Ausgabeströme unterteilt werden.
Hier kann es in Byte -Stream und Charakterstrom unterteilt werden.
Codebeispiel:
Paket com.study.io; import java.io.bufufferedInputstream; import Java.io.BuffeDeredOutputStream; Import Java.io.io.file; Import Java.io.fileInputStream; Importieren von Java.io.io.FileOutputStream; ImportputStream; data on files* FileOutputStream-->Implementation of the method of writing byte data into files* ❤Data input and output stream: * DataOutputStream / DataInputStream: Extending the "stream" function, you can read int, long, characters and other types of data more int, long, and other types* DataOutputStream writeInt()/writeDouble()/writeUTF()* ❤Byte buffered stream: * BufferedInputStream & BufferedOutputStream* Diese beiden Stream -Klasse -Bits IO bieten Operationen mit Puffer. Im Allgemeinen wird beim Öffnen einer Datei zum Schreiben oder Lesevorgängen die Pufferung hinzugefügt. Dieser Stream-Modus verbessert die Leistung von IO** zum Beispiel: Das Eingeben in eine Datei aus einer Anwendung entspricht dem Gießen eines Wasserzylinders in einen anderen Zylinder: FileOutputStream ---> Write () -Methode entspricht dem "Übertragen" des Wassers über DataOutputstream-> Writexxx () Methode ist bequemer. Schaufeln Sie zuerst in den Eimer (d. H. Der Pufferbereich) und gießen Sie ihn dann in einen anderen Zylinder aus dem Eimer. Die Aufführung wird verbessert*/öffentliche Klasse Ioutil {/*** Lesen Sie den Inhalt der angegebenen Datei und geben Sie sie in Hexadezimal* und alle 10 Byte-Zeilenumbrüche* @param Dateiname* Single-Byte-Lesung für große Dateien nicht geeignet für große Dateien geeignet. in = new FileInputStream (Dateiname); int b; int i = 1; while (b = in.read ())! =-1) {/* 0xff wird durch ein 2-stelliges System ersetzt, was 8 1s bedeutet. Auf diese Weise werden die unteren 8 -Bit des Charakters tatsächlich genommen. * OXF beträgt 15. Zahlen weniger als 15 werden in eine Hexadezimalzahl umgewandelt. * Ihr Code hofft, zwei feste hexadezimale Nummern zu sein. Wenn also nur einer generiert wird, müssen Sie 0*/if (b <= 0xf) {// Integer.tohexString (b) vor der Einheitsnummer mit 0System.out.out.print ("0");} // Intiere ergänzt. System.out.print (Integer.tohexString (b)+""); if (i ++%10 == 0) {System.out.println ();}} in.close (); // Dateilesung muss nach dem Lesen und Schreiben geschlossen werden IoException {FileInputStream in = new FileInputStream (Dateiname); Byte [] buf = new Byte [8* 1024];/* Batch -Lesebytes von in In und in das Byte -Array von buf,* Starten Sie aus der 0. Position und setzen Sie es bei den meisten buf.length* die Anzahl der zurückgegebenen. in für (int i = 0; i <bytes; i ++) {System.out.print (Integer.tohexString (buf [i] & 0xff)+""); if (j ++%10 == 0) {System.out.println ();}}*/intes bytes = 0; in.read (buf, 0, buf.length)! &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 (! FileOutputStream (destfile); // Wenn die Datei nicht vorhanden ist, wird sie direkt erstellt. Wenn es existiert, löschen Sie es und erstellen Sie Byte [] buf = New Byte [8 * 1024]; // Batch lesen und schreiben int b; while ((b = in.read (buf, 0, buf.length)! Wenn alle gelesen werden, ist -1; out.write (buf, 0, b); out.flush (); // Es ist am besten,} in IoException {if (! FileInputStream (srcFile)); bufferedOutputStream bos = new BufferedOutputStream (neuer FileOutputStream (destfile); int c; while (c = Bis.read ()! Puffer für Dateikopie* @param srcFile* @param destfile* @throws ioException*/public static void copyFileByte (Datei srcFile, Datei destfile) löst IoException aus {if (! existieren ");} if (! Die Parameter geben den Inhalt des Lese -Byte zurück. Wenn alle Lesevorgänge zurückgegeben werden, ist es -1; out.write (c); out.flush ();} in.close (); out.close (); out.close ();}} Testklasse:
Paket com.study.io; import java.io.file; import java.io.ioxception; oder //Ioutil.printhexByBytearray("e://javaio//fileutils.java")//ioutil.printhex("e://javaio/1.mp3") Bioutil System.currentTimemillis (); System.out.println (Ende - Start);} catch (ioException e) {e.printstacktrace ();}}@testpublic void TestCopyFile () {try {ioutil.copyfile File ("d: //javaio//1copy.txt"));} catch (ioException e) {e.printstacktrace ();}}@testpublic void testCopyFileByBuffer () {try {long start = system.curentTimillis (); Datei ("e: //javaio//1.mp3"), neue Datei ("e: //javaio//2.mp3"); milliseconds*/ioutil.copyFile (neue Datei ("e: //javaio//1.mp3"), neue Datei ("e: //javaio//4.mp3"); // 7ms Long End = System.currentTimillis (); }} 5. Charakterstrom
Paket com.study.io; import java.io.fileinputstream; import Java.io.fileOutputStream; Import Java.io.ioxception; Import Java.io.inputStreamReader; Importieren Sie Java.io.outputStreamwriter; öffentliche Klasse ioSrandoswdemo {public static static void Mains [] chargs) throwswdemo {public static void Main (] [] args. FileInputStream ("e: //javaio//utf8.txt"); InputStreamReader isr = new InputStreamReader (in, "utf-8"); // Standard-Projektcodierung. Beim Betrieb müssen Sie das Codierungsformat der Datei selbst schreiben. FileOutputStream out = new FileOutputStream ("e: //javaio//utf81.txt"); outputStreamwriter osw = new OutputStreamWriter (OUT, "utf-8");/*int c; while ((c = isr.Read ())! char [8*1024]; int c;/*Batch lesen, das Pufferzeichen Array setzen, starten Sie die 0. Position und platzieren Sie die Puffer. Die Anzahl der zurückgegebenen Zeichen ist die Anzahl der Lesezeichen*/while ((c = isr.Read (Buffer, 0, Buffer.Length))! =-1) {String s = neu String (Buffer, 0, c); System.out.print (s); Osw.write (Buffer, 0, c); Osw.flush ();} isr.close (); osw.close (); osw.close ();}}Dateilesen und Schreiben Sie Stream of Character Stream (FileReader/FileWriter)
Filter für Zeichenströme
6. Serialisierung und Deserialisierung von Objekten
Beispiel:
Beachten: