В этой статье на примерах описывается, как Java реализует чтение, запись и сжатие файлов. Конкретный код выглядит следующим образом:
пакет com.toone.iform.action.common; импорт java.io.BufferedReader; импорт java.io.File; импорт java.io.FileInputStream; импорт java.io.FileNotFoundException; .FileOutputStream импорт java.io.FileReader; импорт java.io.FileWriter; импорт java.io.InputStream; импорт java.util.Random; импорт java.util.zip.ZipEntry; импорт java.util.ZipException; zip.ZipFile; общественный класс TestFileIO { static String s = File.separator; частный статический void testInput() { // На диске D находится файл Welcome.java. Теперь прочитайте его побайтно: int a = 0; // int counter=0; FileInputStream f11; // Входной поток try { f11 = new FileInputStream("D:" + s + "Welcome.java"); while ((a = f11.read()) != -1) System.out.print((char) a); Вывод здесь осуществляется побайтно. Китайские иероглифы не могут быть выведены обычным способом, поскольку один китайский иероглиф занимает два байта. System.out.println("/n/n--------------------------------------- -----------/n"); FileReader f12 = new FileReader("D:" + s + "Welcome.java"); while ((a = f12.read()) != - 1) System.out.print((char) a);// Вот вывод по символам, китайские иероглифы могут выводиться нормально System.out.println("/n/n -------------------------- -----------------------/n"); f11.close();// Закрываем файл после прочтения f12.close();// Закрываем файл после чтения} catch (FileNotFoundException e) { // Автоматически созданный блок catch e.printStackTrace() } catch (IOException e) { // Автоматически созданный блок TODO catch block e.printStackTrace(); } } Private static void testOutput() { // На диске D находится файл Welcome.java. Теперь прочитаем его побайтово: int a = 0; // Выходной поток File f21 = новый файл ("D:" + s + "testFile" + s + "test1.txt"); // Определите новый файл f21, а затем определите, существует ли он в этом каталоге. Если он не существует, создайте его. if (!f21.exists()) { f21.getParentFile().mkdirs(); try { f21.createNewFile() // Копируем содержимое "Welcome.java" в f21 FileOutputStream fos = new FileOutputStream(f21); FileInputStream fis = new FileInputStream("D:" + s + "Welcome.java");// Прочитайте файл «Welcome.java» while ((a = fis.read()) != -1) fos.write(a);// Запишите прочитанную память в fos, и теперь test1.txt будет Скопировать / / класс писателя FileWriter из Welcome.java f22 = new FileWriter("D:" + s + "testFile" + s + "test2.txt" for (int i =) 0; я <65535; я++) f22.write(i);//Запись в test2.txt. Отсюда также видно, что операторы в строках 35-38 выше для определения существования файла можно опустить. // Записываем строку в файл FileWriter f23 = new FileWriter("D:" + s + "testFile" + s + "test3.txt"); f23.write("Привет, мир!"); ); fis.close(); f22.close(); f23.close(); } catch (IOException e) { // Автоматически сгенерированный блок захвата TODO e.printStackTrace(); } } } Private static void testBufferring() { // На диске D находится файл Welcome.java, теперь читаем его побайтно: int a = 0, counter = 0 // Буфер символов; , реализация Эффективное письмо // BufferedWriter f31=new BufferedWriter(newFileWriter("D"+s+"testFile"+s+"test4.txt")); BufferedWriter f31; попробуйте {f31 = new BufferedWriter(new FileWriter("D:" + s + "testFile" + s + "test4.txt"); for (int i = 1; i <= 100; i++) { f31; .write(String.valueOf(new Random().nextInt(100)) + " "); if (i %); 10 == 0) f31.newLine(); } f31.flush();// Обновить буфер f31.close(); BufferedReader f32 = new BufferedReader(new FileReader("D:" + s + "testFile" + s + "test4.txt"); String s32; System.out.println("Содержимое выходного файла f32:"); while ((s32 = f32.readLine()) != null) System.out.println(s32.close(); System.out.println("/n----------- ---------------------------------------/n"); } catch (IOException e) { // Автоматически созданный блок catch e.printStackTrace() TODO } } Private static void testZip() { try { File f1 = new; Файл («D:/test.zip»); Файл f2 = новый файл («D:/testFile/testzip»); ZipFile zf = новый ZipFile (f1); testZipToUnzip (zf, f2 } catch (IOException e) { // TODO Автоматически сгенерированный блок catch e.printStackTrace() } } // Извлекаем zip-файл сжатого пакета в файл public static void; testZipToUnzip(ZipFile zipfile, File file) { ZipEntry zentry = null; File zipout; InputStream zis = null; FileOutputStream fos = null; Enumeration e = zipfile.entries(); // Каталог zip-файла while (e.hasMoreElements()). ) { zentry = (ZipEntry) e.nextElement(); System.out.println(zentry.getName());//Какие файлы находятся в zipfile? Но почему оно не выводится по порядку? ? //Помещаем распакованный файл в папку с файлами: zipout = new File(file + s + zentry.getName()); if (!zentry.isDirectory()) { try { zis = zipfile.getInputStream(zentry) ; !zipout.exists()) zipout.getParentFile().mkdirs() fos = новый FileOutputStream(zipout[] b = новый; byte[1024]; int length; while ((length = zis.read(b)) > 0) { fos.write(b, 0, length } fos.close(); zis.close(); (ZipException e1) { // Автоматически сгенерированный блок catch e1.printStackTrace(); } catch (IOException e1) { // Автоматически сгенерированный блок catch TODO e1.printStackTrace(); } } } } public static void main(String[] args) throws ZipException { // TODO Автоматически созданная заглушка метода testInput(); testBufferring(); testZip();