1. Документ Кодирование
Пакет com.study.io;/*** Кодирование тестового файла*/public class oncodedemo {/*** @param args*@throhs exception*/public static void main (string [] args) бросает исключение {string s = "abc abc. Проекта (здесь есть UTF-8) для (байт B: Bytes1) {// конвертировать байты (в int) для отображения System.out.print (integer.tohexstring (b & 0xff)+""); // & 0xff-это удаление первых 24 0s и оставить только последние восемь цифров} system.println (); байт на английском языке */byte [] bytes2 = s.getbytes ("utf-8"); // Здесь будет отображаться исключение, поэтому мы бросаем это исключение для (byte b: bytes2) {system.out.print (integer.tohexstring (b & 0xff)+") На английском языке */byte [] bytes3 = s.getbytes ("gbk"); // Здесь будет отображаться исключение, поэтому мы будем добавлять это исключение для (byte b: bytes3) {system.out.print (integer.tohexstring (b & 0xff)+""); 2 байта*/byte [] bytes4 = s.getbytes ("utf-16be"); // Здесь будет отображаться исключение, поэтому мы бросим это исключение для (byte b: bytes4) {system.out.print (integer.tohexstring (b & 0xff)+""); Хотите превратить байтовую последовательность в строку, вам также необходимо использовать этот метод кодирования, в противном случае появится искаженный код*/string str1 = новая строка (bytes4); // В настоящее время кодирование по умолчанию проекта будет использоваться для преобразования, а искаженная код может появиться System.out.println (str1); // Вам нужно использовать последовательность byte incoding для конвертации string strtn string string string = new. String (bytes4, "utf-16be"); System.out.println (str2);}} проанализировать:
* 1. Объяснение «& 0xff»:
* 0xff представляет собой шестнадцатеричную (десятичное значение - 255) и выражена как двоичный, который является «111111111».
* Тогда и символ представляет количество битов (возврат 1, когда то же самое составляет 1, в противном случае возвращает 0)
* 2. Byte Byte и Int Type Turning:
* Integer.tohexstring (b & 0xff) Здесь сначала выполняются B и 0xff от типа байта, а затем Integer.tohexstring получает шестнадцатеричную строку
* Можно видеть, что результат B & 0xff все еще остается Int, так зачем вам нужно выполнить операцию с 0xff? Direct Integer.toHexString (b);, нельзя заставить байт быть преобразованным? Ответ невозможен.
* Причина в том, что размер. 2. Форма дополнения Два Джавы
* Параметр Integer.ToHexString - это int. Если & 0xff не выполняется, то, когда байт будет преобразован в Int, поскольку int составляет 32 бита, а байт имеет только 8 бит, в настоящее время он будет заполнен. Полем Полем Полем Полем Полем
* Поэтому, когда участвуют байт и 0xFF, байт сначала будет преобразован в пластическую хирургию, так что высокие 24 бита в результате всегда будут очищены 0, поэтому результат всегда - то, что мы хотим.
* 3. Кодирование EUTF-8: китайцы занимают 3 байта, а английский занимает 1 байт
* Кодирование GBK: китайцы занимают 2 байта, а английский занимает 1 байт
* Java использует двойную кодировку (то есть один персонаж в Java учитывает два байта) и является кодированием UTF-16BE. Китайцы занимают 2 байта, английский занимает 2 байта
*
* 4. Когда ваша последовательность байтов является определенной кодировкой, если вы хотите превратить последовательность байтов в строку, вам также необходимо использовать этот метод кодирования, в противном случае произойдет искаженная код.
* 5. Текстовые файлы являются последовательностями байтов. Это может быть любая кодированная последовательность байтов.
* Если мы создаем текстовый файл непосредственно на китайской машине, то файл распознает только кодирование ANSI (например, создайте текстовый файл непосредственно на компьютере)
2. Использование класса файлов
пакет com.study.io; import java.io.file;/*** Использование класса файла*/public class filedemo {/*java.io.file Class представляет файл или каталог. Класс файлов используется только для представления информации файла или каталога (имя, размер и т. Д.) И не может использоваться для доступа к содержимому файла. */public static void main (string [] args) {file file = new File ("d: // 111"); // При создании объекта файла вам необходимо использовать двойные удары для указания каталога, потому что "/" - это экологичный символ/*Сепаратор в середине каталога может быть использован с двойными чертами, Backslashes или File.separator, чтобы подготовить Septator*////meparator. File ("d:"+file.separator); // system.out.println (file.exists ()); // exists () определяет, существует ли файл или папка, если (! File.exists ()) {// Если файл не существует file.mkdir (); // create mkdir () и mkdirs () Directory} else {file.delete (); // Удалить файл или папку} // Обнаружение, является ли это каталогом ISDirectory, вернуть true, если это каталог, вернуть falsesystem.out.println (file.isdirectory ()); // отображать, является ли это файл файл. File2 = new File ("D: // 222", "123.txt"); // common api: system.out.println (file); // Распечатать содержимое файла.tostring () system.out.println (file.getabsolutepath ()); // Получить систему абсолютного пути. System.out.println (file2.getName ()); System.out.println (file.getParent ()); // Получить родительский Absolute Path System.out.println (file2.getParentFile (). GetabSolutePath ());}} Результаты работы:
иллюстрировать:
Java.io.file Class представляет собой файл или каталог
Класс файлов используется только для представления информации (имя, размер и т. Д.) Файла или каталога и не может использоваться для доступа к содержимому файла.
Обычно используется API:
1. Создать объект файла: file file = new File (Path String); Примечание: file.seperater (); Получите систему разделителя, например: "/".
2. Будь то логический файл.exists (); существует.
3.file.mkdir (); или file.mkdirs (); Создайте каталог или многоуровневый каталог.
4.file.isdirectory () определяет, является ли это каталогом
file.isfile () определяет, является ли это файлом.
5.file.delete (); удалить файл или каталог.
6.file.createnewfile (); Создайте новый файл.
7.file.getName () Получает имя файла или абсолютный путь каталога.
8.file.getabsolutepath () получает абсолютный путь.
9.file.getParent (); Получите родительский абсолютный путь.
1. Переезд в каталог
пакет com.study.io; import java.io.file; import java.io.ioexception;/*** Класс инструментов файла*Перечисляет общие операции класса файлов, такие как: Фильтрация, проезд и т. Д.*/Public Class FileUtils {/*** Перечисляет все файлы в указанном каталоге (включая его подразделения)*@param dir ListDirectory (файл dir) Throws IOException {if (! dir.exists ()) {// exists () используется для определения того, есть ли файл или каталог, который новая новая allosalargumentException («dir:«+dir+»не существует»);} if (! dir.isdirectory () {// iSdirector AllogalargumentException (dir+"не каталог");}/*string [] filenames = dir.list (); // list () метод используется для перечисления подкаталогов и файлов в текущем каталоге (это непосредственно имя подканалиста и не содержит содержимое в подкаканиреториях), и строка rate -restress: строка string: string string: string string): строка: строка string: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: строка: {System.out.println (String);}*/// Если вы хотите пройти содержимое в подкаталоге, вам необходимо построить объект файла для рекурсивных операций. Файл предоставляет Apifile, который непосредственно возвращает объект файла. ListFiles = dir.listFiles (); // Возвращает абстракцию прямой подкатализации (файл) if (listfiles! = null && listfiles.length> 0) {для (файл файла: listfiles) {/*System.out.println(file) ;*/if(file.isdirectory() [/rintln(file); ListDirectory (file);} else {System.out.println (file);}}}}}} Тестовый класс:
открытый класс FileUtilStest {public static void main (string [] args) throws ioException {fileUtils.listdirectory (new file ("d: // iostudy"));}} Результаты работы:
3. Использование класса Randomaccessfile
RandomAccessfile: Java предоставляет доступ к содержимому файла, который можно использовать для чтения файлов или файлов записи.
RandomAccessFile поддерживает случайный доступ к файлам и может получить доступ к любому местоположению файла.
Обратите внимание на модель файла Java:
Результаты работы:
1
12
[65, 66, 127, -1, -1, -1, 127, -1, -1, -1, -42, -48]
7f
фф
фф
фф
7f
фф
фф
фф
D6
D0
4. Byte Stream (FileInputStream, FileOutputStream)
Потоки ввода -вывода могут быть разделены на входные потоки и выходные потоки.
Здесь его можно разделить на байтовый поток и поток символов.
Пример кода:
Пакет com.study.io; import java.io.bufferedInputStream; import java.io.bufferedOutputStream; import java.io.file; import java.io.fileinputStream; Import Java.io.fileOutputStream; импорт java.io.ioexcept Данные о файлах* fileOutputStream-> Реализация метода записи байтовых данных в файлы* ❤data Ввод и выходной поток:* DataOutputStream/DataInputStream: расширение функции «потока», вы можете прочитать int, long, символы и другие типы данных. BufferedOutputStream* Эти два бита класса потока ввождение в io обеспечивают операции с буферами. Как правило, при открытии файла для написания или чтения будет добавлено буферизация. 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 putting a Сначала выкопайте в ведро (то есть буферная зона), а затем выливайте в другой цилиндр из ведра. The performance is improved*/public class IOUtil {/*** Read the content of the specified file and output it to the console in hexadecimal* and every 10 byte line breaks* @param fileName* Single-byte reading is not suitable for large files, and large files are very inefficient */public static void printHex(String fileName)throws IOException{//Operate the file as a byte stream FileInputStream in = new FileInputStream (имя файла); int b; int i = 1; while ((b = in.read ())! =-1) {/* 0xff заменяется 2-значной системой, что означает 8 1S. Таким образом, более низкие 8 бит персонажа фактически взяты. * OXF составляет 15. Числа менее 15 будут преобразованы в шестнадцатеричное число. * Ваш код надеется быть двумя фиксированными шестнадцатеричными числами, поэтому, когда сгенерировано только одно, вам нужно добавить 0*/if (b <= 0xf) {// Integer.tohexstring (b) до того, как номер единицы добавляется с помощью 0System.out.print ("0");} // integer.tohexstring (b) integer integer wtegal integer wtegal wtegal wtegal integer wto hexal integer integer integer integem System.out.print (integer.tohexstring (b)+""); if (i ++%10 == 0) {System.out.println ();}} in.close (); // Чтение файлов должно быть закрыто после чтения и написания}/*** Партийное чтение является эффективным для больших файлов и также является наиболее часто используемым способом чтения файлов* @param filename* @Throws IoExcept IoException {fileInputStream in = new FileInputStream (FileName); Byte [] BUF = новый байт [8* 1024];/* Партия чтения байтов с и положить их в массив BUF,* Начните с 0 -й позиции, и положить на большинство buf.length* return - это число, читая*//*///bytes = = bytes = = byt in.read (buf, 0, buf.length); // Читать за один раз, указывая, что байтовая массив достаточно большой int j = 1; for (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; in.read (buf, 0, buf.length))! =-1) {for (int i = 0; i <bytes; i ++) {System.out.print (integer.tohexstring (buf [i] & 0xff)+"") & 0xff*/if (j ++%10 == 0) {System.out.println ();}}} in.close ();}/*** Копия файла, байтовая партия чтения* @param srcfile* @param destfile* @throhs ioexcept (! srcfile.exists ()) {throw new allogalargumentException ("file:" + srcfile + "не существует");} if (! srcfile.ishile ()) {throw new allodalargumentexception (srcfile + "не файл");} fileInpretStream in = newAintream (srcfile); FileOutputStream (destFile); // Когда файл не существует, он будет создан напрямую; Если он существует, удалите его и создайте Byte [] BUF = новый байт [8 * 1024]; // Пардер для чтения и записи int b; while ((b = in.read (buf, 0, buf.length))! = -1) {//read(buf,0,0,buf.length) чтение с параметрами возвращает общую длину байтов; Когда все прочитано -1; out.write (buf, 0, b); out.flush (); // Лучше всего добавить} in.close (); out.close ();}/*** копировать файл и использовать буферированный байт -поток* @param srcfile* @param destfile* @throw IoException {if (! Srcfile.exists ()) {throw new allogalArgumentException ("file:"+srcfile+"не существует");} if (! Srcfile.isfile ()) {Throw newallalarargumentException (srcfile+"Не файл"); FileInputStream (srcfile)); BufferedOutputStream bos = new BufferedOutputStream (new FileOutputStream (destfile)); int c; while ((c = bis.read ())! =-1) {bos.write (c); bos.flush (); // свежее Буферизация для копии файла* @param srcfile* @param destfile* @throws ioexception*/public static void copyfilebybyte (file srcfile, файл destfile) бросает ioexception {if (! srcfile.exists ()) {thress newallalargumentExcept Существуют ");} if (! srcfile.isfile ()) {throw new allogalargumentException (srcfile+" не файл ");} fileInputStream in = new FileInputStream (srcfile); fileOutputStream Out = new FileOutputStream (destfile); int create (c = in.) Возвращает контент чтения байта; Когда все чтения возвращаются, составляет -1; out.write (c); out.flush ();} in.close (); out.close (); out.close ();}} Тестовый класс:
пакет com.study.io; импорт java.io.file; import java.io.ioexception; импорт org.junit.test; public class ioutiltest {@testpublic void testprinthex () {try {ioutil.printhex ("d: //javaio//fileuts.java"); {e.printstacktrace ();}}@testpublic void testprinthexbytearray () {try {long start = system.currenttimemillis (); // Разница во времени между текущим временем и полуночи 1 января 1970 года (измерено в миллисекундах) //Ioutil.printhexbytearray("e://javaio//fileutils.java");//ioutil.printhex("e://javaio//1.mp3"); end = System.currentTimeMillis (); System.out.println (end - start);} catch (ioException e) {e.printstacktrace ();}}@testpublic void testcopyfile () {try {iOutil.copyfile (новый файл ("d: //javaio/1.txt"), new File ("d: //javaio//1copy.txt"));} catch (ioexception e) {e.printstacktrace ();}}@testpublic void testcopyfilebuffer () {try {long start = system.currenttimemillis (); File ("e: //javaio//1.mp3"), новый файл ("e: //javaio/2.mp3"));//// более 20 000 миллисекундов/*ioutil.copyfilebuffer (new File ("E: //javaio//1.mp3"), new File (e: //javio; чем 10 000 миллисекундов*/ioutil.copyfile (новый файл ("e: //javaio//1.mp3"), новый файл ("E: //javaio//4.mp3")); // 7 мс длиной = System.currentTimiLLIS (); System.out.println (end - Start); {e.printstacktrace ();}}} 5. Поток персонажей
Пакет com.study.io; import java.io.fileinputStream; import java.io.fileOutputStream; импорт java.io.ioexception; импорт java.io.inputStreamRead; импорт java.io.outputStreamwriter; public class israndoSwdemo {public static void main (string) throwexememeam in in void in void void void in void void in void void void in. FileInputStream ("e: //javaio//utf8.txt"); inputStreamReader ISR = new InputStreamReader (in, "UTF-8"); // Кодирование проекта по умолчанию. При работе вам нужно написать формат кодирования самого файла. FileOutputStream OUT = new FileOutPutStream ("e: //javaio//utf81.txt"); outputstreamwriter osw = new outputstreamwriter (out, "utf-8");/*int c; while ((c = isr.read ())! =-1) {system.out.print (char) c); C;/*Партийное чтение, поместите массив буферных символов, начните с 0 -й позиции и поместите буфер. Количество возвращенных символов-это количество символов чтения*/while ((c = isr.read (buffer, 0, buffer.length))! =-1) {String s = новый String (Buffer, 0, C); System.out.print (s); OSW.Write (Buffer, 0, C); Osw.flush ();} isr.close (); osw.close (); osw.close ();}}Файл Читать и Поток потока символов (FileReader/FileWriter)
Фильтр для потоков символов
6. Сериализация и десериализация объектов
Пример:
Уведомление: