zoukankan      html  css  js  c++  java
  • Java核心技术(初阶)知识点复习——[11]Java文件处理

    1.文件系统和Java文件基本操作

      [1]文件系统是由OS(操作系统)管理的,由文件夹和文件递归而成,文件目录的分割Windows是用隔开,每个文件包括内容和基本属性;

       文件系统和Java进程是平行运行的两套系统;

       可用用Java来访问文件的基本属性,包括名称、大小、拓展名、修改时间等;

      [2]java.io.File类

       是文件和目录的重要类,不涉及文件的具体内容,只涉及文件属性;

       常用方法包括:createNewFile(), delete(), getName(), getParent(), getPath(), length(), listFiles(), isFile(), isDirectory(), makedir(), makedirs()等;

    2.Java io包中访问文件内部具体内容的类和方法

      Java读&写文件,只能以(数据)流的形式进行;因为如上文1.[1]中提到,文件系统和Java程序是两套平行运行的系统,由于文件可能很大,Java可能不能一口气将文件都加载进内存(栈?先暂时搁置这个问题),只能以“流”的形式分批处理;

      [1]节点类:直接对文件进行读写

           InputStream;OutputStream;

             子类FileInputStream;FileOutputStream;

           Reader;Writer;

             子类FileReader;FileWriter;

    注:inputStream督导最后一个字节时,默认返回-1;

      [2]包装类:

        1)转化类:字节/字符/数据类型的转化类;因为文件都是以字节进行保存的,所以Java程序(字符)将变量(字符/数据类型)保存到文件需要转化;

          InputStramReader; OutputStreamWriter;

        2)装饰类:装饰节点类

          DataInputStream, DataOutputStream:封装数据流 

          BufferedInputStream, BufferedOutputStream:缓存字节流,当数据需要存到硬盘上时,内存的读写速度较快,而硬盘的读写速度太慢,所以通常CPU会在内存里开辟一个缓存区,把数据先快速写入到内存缓存区中,然后内存缓存区再转移到硬盘中;CPU不用等待在较慢的操作上,而是去做其他的计算,这样可以提高CPU的使用效率;

          BufferedReader, BufferedWriter:缓存字符流

    3.文本文件的读写

      [1]文件类型:

        一般文本文件:.txt;

        一般二进制文件:.dat;

        带特殊格式的文本文件:.xml;

        带特殊格式的二进制文件:.doc, .ppt

      [2]写文件

        创建文件→写入数据→关闭文件

        FileOutputStream类→OutputStreamWriter类、BufferedWriter类→try-resource语句、close最外层语句:BufferedWriter(OutputStreamWriter(FileOutPutStream)));

        注意BufferedWriter中的newLine();方法的使用;

      [3]写文件

        打开文件→逐行读入数据→关闭文件

        FileInputStream类→InputStreamWriter类、BufferedReader类→try-resource语句、close最外层语句:BufferedReader(InputStreamWriter(FileInPutStream));

        注意BufferedReader中的readLine();方法的使用;

    4.二进制文件读写

      [1]二进制文件:

        采用字节编码的所有非字符编码文件都可以称为二进制文件;

        二进制文件等无法打开/阅读;

      [2]写文件

        创建文件→写入数据→关闭文件

        FileOutputStream类→BufferedOutputStream类、DataOutputStream类→try-resource语句、close最外层语句:DataOutputStreamWriter(BufferedOutputStream(FileOutputStream));

        注意DataOutputStream类中flush();write[各种数据类型]();等方法的使用;

      [3]读文件

        打开文件→逐行读入数据→关闭文件

        FileInputStream类→BufferedIntputStream类、DataInputStream类→try-resource语句、close最外层语句:DataInputStreamWriter(BufferedInputStream(FileInputStream));

        注意DataInputStream类中read[各种数据类型]();等方法的使用;

    5*.zip文件读写

      [1]Java zip包,zip文件操作类放置在java.util.zip包中

      [2]压缩

       打开输出zip文件→添加一个zipEntry→打开一个输入文件,读数据→向ZipEntry写数据→关闭输入文件→重复以上步骤,实现将多个文件写到zip包中→关闭zip文件

     1 import java.io.File;
     2 public class MultipleFileZip{
     3     public static void main(String args[]) throws Exception{
     4         File file = new File("c:/temp/mutiple");//定义要压缩的文件夹
     5         File zipFile = new File("c:/temp/multiple.zip");//定义压缩文件名称
     6 
     7         InputStream input = null;//定义文件输入流
     8         ZipOutputStream zipOut = null;//声明压缩流对象
     9         zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
    10         zipOut.setComment("multiple fule zip");//举例File类的方法,如setComment
    11 
    12         //开始压缩
    13         int temp = 0;
    14         if(file.isDirectory()){//判断是否为文件夹
    15             File lists[] = file.listFiles();//列出全部子文件
    16             for(int i=0; i<lists.length; i++){
    17                 input = new FileInputStream(lists[i]);//定义文件的输入流
    18                 zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator  + lists[I].getName()));//设置ZipEntry对象
    19 
    20                System.out.println("正在压缩" + lists[i].getName());
    21     
    22                while((temp = input.read()) != -1){//读取内容
    23                   zipOut.write(temp);//压缩输出
    24                }
    25                 input.close();//关闭输入流
    26             }
    27         }
    28         zipOut.close();//关闭输出流
    29         System.out.println("multiple file zip done.")
    30 }    

      

      [3]解压     

     1 import java.io.File;
     2 public class SingeFileUnzip{
     3         public static void main(string args[]) throws Exception{
     4             //带解压文件,需要从zip文件打开输入流,读取数据到java中
     5             File zipFile = new File("c:/temp/single.zip");//定义压缩文件名称
     6             ZipInputStream input = null;//定义压缩输入流
     7             input = new ZipInputStream(new FileInputStream(zipFile));//实例化ZipInputStream
     8             ZipEntry entry = input.getNextEntry();//得到一个压缩实体
     9             
    10             //新建目标文件,需要从目标文件打开输出流,数据从java流入
    11             File outFile = new File("c:/temp/" + entry.getName());
    12             OutputStream out = new FileOutputStream(outFile);//实例化文件输入流
    13             int temp = 0;
    14             while((temp = input.read()) != -1){
    15                 out.write(temp);
    16             }
    17             input.close();//关闭输入流
    18             out.close();//关闭输出流
    19             System.out.println("unzip done.");
    20     }
    21 }

     

  • 相关阅读:
    Spring5源码--Spring AOP使用接口方式实现 配置xml文件
    什么是 JavaConfig?
    Spring Boot 有哪些优点?
    什么是 Spring Boot?
    问:一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
    如何实现参数级联查询
    如何开发主从报表
    如何在报表中实现算法的可挂接需求
    如何实现报表的批量打印需求
    如何实现参数和报表间的联动效果
  • 原文地址:https://www.cnblogs.com/li7anStrugglePath/p/12735266.html
Copyright © 2011-2022 走看看