java实现文件读写与压缩实例

 更新时间:2014年07月23日 16:16:04   投稿:shichen2014  
这篇文章主要介绍了java实现文件读写与压缩实例,有助于读者加深对文件操作的理解,需要的朋友可以参考下

本文通过实例讲述了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();
  }
}

相关文章

  • Java和Python现在都挺火,我应该怎么选?

    Java和Python现在都挺火,我应该怎么选?

    这篇文章主要介绍了Java和Python现在都挺火,我应该怎么选?本文通过全面分析给大家做个参考,需要的朋友可以参考下
    2020-07-07
  • SpringBoot Shiro授权实现过程解析

    SpringBoot Shiro授权实现过程解析

    这篇文章主要介绍了SpringBoot Shiro授权实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Tree组件实现支持50W数据方法剖析

    Tree组件实现支持50W数据方法剖析

    这篇文章主要为大家介绍了Tree组件实现支持50W数据的方法剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 简单总结单例模式的4种写法

    简单总结单例模式的4种写法

    今天带大家学习java的相关知识,文章围绕着单例模式的4种写法展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • MyBatis-Plus 自定义sql语句的实现

    MyBatis-Plus 自定义sql语句的实现

    这篇文章主要介绍了MyBatis-Plus 自定义sql语句的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • springCloud服务注册Eureka实现过程图解

    springCloud服务注册Eureka实现过程图解

    这篇文章主要介绍了springCloud服务注册Eureka实现过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • SpringBoot Controller返回图片的三种方式

    SpringBoot Controller返回图片的三种方式

    在互联网的世界里,图片无处不在,它们是信息传递的重要媒介,也是视觉盛宴的一部分,而在Spring Boot项目中,如何优雅地处理和返回图片数据,则成为了开发者们不得不面对的问题,今天,就让我们一起来探索Spring Boot Controller的神奇转换,需要的朋友可以参考下
    2024-07-07
  • 简单了解synchronized和lock的区别

    简单了解synchronized和lock的区别

    这篇文章主要介绍了简单了解synchronized和lock的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • SpringBoot请求响应方式示例详解

    SpringBoot请求响应方式示例详解

    这篇文章主要介绍了SpringBoot请求响应的相关操作,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • 浅谈Java四种线程池及new Thread的弊端

    浅谈Java四种线程池及new Thread的弊端

    本文主要介绍了浅谈Java四种线程池及new Thread的弊端,详细的介绍了newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor四种的使用,感兴趣的可以了解一下
    2024-01-01

最新评论