Java的文件操作--1

前两天看了《java核心编程》中对于java中的IO输入输出讲解,收获良多,下面的程序是我读完书以后自己写的一个将zip文件集中的文件内容读取出来然后显示(只限于文本,其他文件将会产生乱码),此程序也可通过改进可以得到一个和winzip功能一样的类(但是没有界面,主要是awt不会:--(  ),过两天就把源码贴出来。很简单的一个类,希望对大家有用。
这是本人第一次发文章,不足之处请多多指教!!!
/**
 *功能:Zip文件释放,Zip文件目录、选择目录后显示文件内容
 *  首先用户输入zip文件路径及名称,读取zip文件将文件集中的文件清单显示出来,
 *  用户选择需要显示的文件,之后通过DataInputStream类将文件内容读取出来并
 *  显示在标准输出端
 *日期:2005-06-27
 *作者:Pcera
 */
import java.util.*;
import java.util.zip.*;
import java.io.*;
class ZipFileHandle{
 private String[] FileNameArray;            //真实文件名存放数组
 private String[] FileNameArrayShow;        //需要显示的文件名存放数组
 private ZipInputStream zipFile;            //zip输入流对象
 private ZipEntry entry;                    //zip文件入口对象
 private int zipFileCount = 0;              //zip中的文件总数
 
 /**
  *初始化各个参数
  *通过类的套嵌来访问文件
  *将得到文件的清单附值给数组,以便在后面用户选择时从数组中获得文件名
  */
 public ZipFileHandle(File file){
  try{ 
   while (!(file.exists())) {
    System.out.println("Plase input right path again: "); 
    BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
    String filepath = userInput.readLine();
    file = new File(filepath); 
   }  
   zipFile = new ZipInputStream(new FileInputStream(file));
   while ((zipFile.getNextEntry()) != null){
    zipFileCount++;
   }   
   FileNameArray = new String[zipFileCount];
   FileNameArrayShow = new String[zipFileCount];
  }catch(IOException e){
   System.out.println("初始化错误!!!");
   e.printStackTrace();
  } 
 }
 /**
  *生成文件目录
  *根据show的值来确定返回值
  *如果show的值为"sh"则返回在屏幕上显示的名称
  *如果show的值为"gr"则返回实际名称
  */
 public String[] getFileNameList(String show,File file){
  try{
   int i = 0;
   String FileName;
   zipFile = new ZipInputStream(new FileInputStream(file));
   while ((entry = zipFile.getNextEntry()) != null){
    FileName = entry.getName();
    //真实文件名附值
    FileNameArray[i] = FileName;
    //显示文件名附值
    if (FileName.equals("")) FileName = "...";
    FileName = Integer.toString(i) + "-|" + FileName;
    FileNameArrayShow[i] = FileName;
    i++;
   }
   zipFile.close();
   //根据条件返回文件数组
   if(show == "sh"){
    return FileNameArrayShow;
   }else{
    return FileNameArray;
   }   
  }catch(IOException e){
   System.out.println("读取zip文件内的文件名出错!!!");
   e.printStackTrace();
   return null;
  }
 }
 
 /**
  *读取文件内容
  *根据传递进来的zip文件对象和
  *zip中所要显示的文件
  *用户根据type来选择返回的是unicode信息还字节信息
  *如果type是"Str"则返回字符串信息,"Byte"则返回通过字节获得的文件内容
  */
 public String loadFileCon(String fileName,File file,String type){
  String fileContent = "",conTemp = "";
  byte[] fileConfByte;
  try{
   //找到要显示的文件入口,然后读取通过文本格式读取文件内容             
   zipFile = new ZipInputStream(new FileInputStream(file));
   //读取文件内容
   while ((entry = zipFile.getNextEntry()) != null){
    if (entry.getName().equals(fileName)){
     //通过字节读取文件内容 
     if (type.equals("Byte")){ 
      fileConfByte = new byte[(int)entry.getSize()]; 
      DataInputStream reader = new DataInputStream(zipFile);
      reader.readFully(fileConfByte,0,(int)entry.getSize());
      fileContent = new String(fileConfByte);     
     }else if ((type.equals("Str"))){
      //通过unicode字符读取文件内容
      BufferedReader in = new BufferedReader(new InputStreamReader(zipFile));
      while ((conTemp = in.readLine()) != null){
       fileContent = fileContent + conTemp + "\n\r";
      }
     }
    } 
   }
   //关闭文件zip流
   zipFile.closeEntry();
   zipFile.close();
   //返回
   return fileContent;

  }catch(IOException e){
   System.out.println("读取文件内容失败!!!");   
   e.printStackTrace();
   return null;
  }  
  
 }
 
 /**
  *演示方法
  */
 public static void main(String args[]){
  String filePath;
  String[] showFileArr;
  String[] realFileArr;
  String fileContent;
  int choose;
  //通过用户获得文件路径和文件名
  try{
   BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
   System.out.println("Plase zip file path and name !!!");
   filePath = userInput.readLine();
   File file = new File(filePath);
   while (!(file.exists())) {
    System.out.println("Plase input right path again: "); 
    filePath = userInput.readLine();
    file = new File(filePath); 
   }
   //显示文件目录,显示选择的文件的内容
   //获得真实文件名和显示文件名数组
   ZipFileHandle zipFile = new ZipFileHandle(file);
   showFileArr = zipFile.getFileNameList("sh",file);
   realFileArr = zipFile.getFileNameList("gr",file);
   //打印显示文件名数组
   int i = 0;
   while (i < showFileArr.length){
    System.out.println(showFileArr[i]);
    i++;
   }
   //通过用户输入获得需要显示的文件
   System.out.println("Plase choose file num!!!");
   choose = Integer.parseInt(userInput.readLine());
   if ((choose <0)||(choose >  showFileArr.length)){
    System.out.println("Plase choose file num retry!!!");
    choose = Integer.parseInt(userInput.readLine());
   }
   //获得用户选择的文件的内容
   fileContent = zipFile.loadFileCon(realFileArr[choose],file,"Byte");
   System.out.println(fileContent);
   
  }catch(Exception e){
   System.out.println("测试程序出错!!!");
   e.printStackTrace();
  }  
 }  
}

时间: 2024-10-31 17:10:08

Java的文件操作--1的相关文章

java IO 文件操作

  /* java  文件操作  java中文件操作的类是 File类   可以实现对文件的创建删除  修改等 File类  在  java.io包中  下面是 通过 java.io.File类实现对文件操作 File类没有提供对文件的读写方法 */ import  java.io.*;   //导入io包 class  Test {  public static void main(String []args)  throws Exception //直接吧所有异常抛出给 JVM虚拟机  {

Java的文件操作--2(Zip文件释放)

  在java中专门有一个对zip文件操作的包(java.util.zip),对zip文件操作挺方便的,上次说写一个zip文件释放程序,花了一天时间终于写完了,起先想起来挺简单的:原理就是将zip文件中的文件夹和文件通过ZipInputStream和ZipEntry类一一得出,然后分别再对应目录下创建文件和文件夹.可是实现起来就不是那么回事了,其中有好多细节问题都不好解决,其中在调用ZipInputStream中的getNextEntry方法时如果zip文件中包含中文路径名或者文件名就会抛出异常

基于java file 文件操作operate file of java的应用_java

java文件操作 复制代码 代码如下: package com.b510;  import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.InputStream; import java.io.PrintWriter;  /**  *   * @author Hongten</br>  *   *  

java IO 文件操作 希望大神解惑

问题描述 如何替换文件中的一行字符串?(也可以是如何在某非结尾行添加数据)已知条件:1:每一行的内容是唯一可识别的2:替换的字串Astr.length()是不确定的,即假设替换字串为Astr,被替换字串为Bstr,以下情况都有可能存在:Astr.length()<Bstr.length()Astr.length()==Bstr.length()Astr.length()>Bstr.length()3:解决方案语言随意,最好java吧....其它的语言希望有讲解~~最好满足下列要求:1:从头到尾

Java对文件的随机读写以及压缩处理操作_java

Java中文件的随机读写 Java.io 包提供了 RandomAccessFile 类用于随机文件的创建和访问.使用这个类,可以跳转到文件的任意位置读写数据.程序可以在随机文件中插入数据,而不会破坏该文件的其他数据.此外,程序也可以更新或删除先前存储的数据,而不用重写整个文件. RandomAccessFile类是Object类的直接子类,包含两个主要的构造方法用来创 建RandomAccessFile 的对象,如表所示. 需要注意的是,mode 表示所创建的随机读写文件的操作状态,其取值包括

Java I/O技术之文件操作详解_java

在java程序设计中,I/O操作是通过java.io包中的类和接口来实现的,因此,我们第一步要做的就是import这个包. java.io提供了一个File类,这是类很容易让人产生误会,它表示的是一个文件名或者目录名,而不是文件本身,所以通过这个类没法对文件里面的数据进行操作.File类提供了一序列对文件操作的功能:删除文件,创建目录,查询文件大小等等.要想对文件数据进行操作那就需要流对象了,在这里就暂时不做介绍. 下面通过一个叫做FileExtension类来对File类中的各种操作进行封装,

Android 文件操作心得体会

android 的文件操作说白了就是Java的文件操作的处理.所以如果对Java的io文件操作比较熟悉的话,android的文件操作就是小菜一碟了.好了,话不多说,开始今天的正题吧. 先从一个小项目入门吧 首先是一个布局文件,这一点比较的简单,那就直接上代码吧. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.andr

Android 文件操作详解及简单实例

Android 文件操作详解 Android 的文件操作说白了就是Java的文件操作的处理.所以如果对Java的io文件操作比较熟悉的话,android的文件操作就是小菜一碟了.好了,话不多说,开始今天的正题吧. 先从一个小项目入门吧 首先是一个布局文件,这一点比较的简单,那就直接上代码吧. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http

java文件操作大全

java文件操作大全 文件的建立/检查与删除<%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.io.*"%><html><head><title>文件的建立.检查与删除</title></head><body><%String path=request.getRealPath