本文通過實例講述了Java對文件讀寫與壓縮的實現方法,具體代碼如下:
- package com.toone.iform.action.common;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Enumeration;
- import java.util.Random;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipException;
- import java.util.zip.ZipFile;
- public class TestFileIO {
- static String s = File.separator;
- private static 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) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- private static void testOutput() {
- // D盤下有個Welcome.java文件,現在按字節讀入:
- int a = 0;
- // 輸出流
- File f21 = new File("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就是復制Welcome.java的
- // writer類
- FileWriter f22 = new FileWriter("D:" + s + "testFile" + s + "test2.txt");
- for (int i = 0; i < 65535; i++)
- f22.write(i);//寫入到test2.txt中。由這里也可以看出,上面35-38行判斷文件是否存在的語句也可以不要。
- // 向文件中寫入字符串
- FileWriter f23 = new FileWriter("D:" + s + "testFile" + s + "test3.txt");
- f23.write("Hello, world!");
- fos.close();
- fis.close();
- f22.close();
- f23.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- 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;
- try {
- 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);
- f32.close();
- System.out.println("\n--------------------------------------------------\n");
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- private static void testZip() {
- try {
- File f1 = new File("D:/test.zip");
- File f2 = new File("D:/testFile/testzip");
- ZipFile zf = new ZipFile(f1);
- testZipToUnzip(zf, f2);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- // 將壓縮包zipfile解壓到file中
- public static void testZipToUnzip(ZipFile zipfile, File file) {
- ZipEntry zentry = null;
- File zipout;
- InputStream zis = null;
- FileOutputStream fos = null;
- Enumeration e = zipfile.entries();// zipfile的目錄
- while (e.hasMoreElements()) {
- zentry = (ZipEntry) e.nextElement();
- System.out.println(zentry.getName());// zipfile下有哪些文件?可是為什么不按順序輸出??
- // 將解壓后的文件放到file文件夾下:
- zipout = new File(file + s + zentry.getName());
- if (!zentry.isDirectory()) {
- try {
- zis = zipfile.getInputStream(zentry);
- if (!zipout.exists())
- zipout.getParentFile().mkdirs();
- fos = new FileOutputStream(zipout);
- byte[] b = new byte[1024];
- int length;
- while ((length = zis.read(b)) > 0) {
- fos.write(b, 0, length);
- }
- fos.close();
- zis.close();
- } catch (ZipException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- } catch (IOException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- }
- }
- }
- public static void main(String[] args) throws ZipException {
- // TODO Auto-generated method stub
- testInput();
- testOutput();
- testBufferring();
- testZip();
- }
- }